Java中实现Comparator接口和用法实例(简明易懂)

时间:2021-10-19 06:07:07

在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标。

接下来我们模拟下在集合对象中对日期属性进行排序

一、实体类Step

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.ljq.entity;
 
 
/**
 * 运号单流程
 *
 * @author Administrator
 *
 */
public class Step{
  /** 处理时间 */
  private String acceptTime = "";
  /** 快件所在地点 */
  private String acceptAddress = "";
 
  public Step() {
    super();
  }
 
  public Step(String acceptTime, String acceptAddress) {
    super();
    this.acceptTime = acceptTime;
    this.acceptAddress = acceptAddress;
  }
 
  public String getAcceptTime() {
    return acceptTime;
  }
 
  public void setAcceptTime(String acceptTime) {
    this.acceptTime = acceptTime;
  }
 
  public String getAcceptAddress() {
    return acceptAddress;
  }
 
  public void setAcceptAddress(String acceptAddress) {
    this.acceptAddress = acceptAddress;
  }
 
}

二、实现Comparator接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.ljq.entity;
 
import java.util.Comparator;
import java.util.Date;
 
import com.ljq.util.UtilTool;
 
/**
 * 对Step类进行排序
 *
 * @author Administrator
 *
 */
public class StepComparator implements Comparator<Step>{
 
  /**
   * 如果o1小于o2,返回一个负数;如果o1大于o2,返回一个正数;如果他们相等,则返回0;
   */
  @Override
  public int compare(Step o1, Step o2) {
    Date acceptTime1=UtilTool.strToDate(o1.getAcceptTime(), null);
    Date acceptTime2=UtilTool.strToDate(o2.getAcceptTime(), null);
    
    //对日期字段进行升序,如果欲降序可采用before方法
    if(acceptTime1.after(acceptTime2)) return 1;
    return -1;
  }
 
}

三、测试

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package junit;
 
import java.util.Collection;
import java.util.Collections;
import java.util.List;
 
import org.junit.Test;
 
 
public class StepComparatorTest {
 
  @Test
  public void sort() throws Exception{
    List<Step> steps=new ArrayList<Step>;
    //对集合对象进行排序
     StepComparator comparator=new StepComparator();
    Collections.sort(steps, comparator);
    if(steps!=null&&steps.size()>0){
      for(Step step:steps){
        System.out.println(step.getAcceptAddress());
        System.out.println(step.getAcceptTime());
      }
    }
 
  }
}