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
package com.hanchao.test;
/**
 * 实体类Step
 * @author liweihan (liweihan@sohu-inc.com)
 * @version 1.0 (2016年1月13日 下午4:30:59)
 */
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;
    }
}
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
package com.hanchao.test;
 
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Comparator;
import java.util.Date;
 
/**
 * 对Step类排序的接口
 * @author liweihan (liweihan@sohu-inc.com)
 * @version 1.0 (2016年1月13日 下午4:35:26)
 */
public class StepComparator implements Comparator<Step>{
     
    private static final SimpleDateFormat yyyyMMdd = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
 
    /**
     * 如果o1小于o2,返回一个负数。
     * 如果o1大于o2,返回一个正数。
     * 如果o1等于o2,则返回0
     */
    @Override
    public int compare(Step o1, Step o2) {
        try {
            Date acceptTime1 = yyyyMMdd.parse(o1.getAcceptTime());
            Date acceptTime2 = yyyyMMdd.parse(o2.getAcceptTime());
             
            //对字段进行升序,如果要降序可以采用before方法
            if (acceptTime1.after(acceptTime2)) {
                return 1;
            }
        catch (ParseException e) {
            e.printStackTrace();
        }
        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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package com.hanchao.test;
 
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
 
import com.sohu.star.pojo.Album;
 
/**
 * @author liweihan (liweihan@sohu-inc.com)
 * @version 1.0 (2016年1月13日 下午4:47:49)
 */
public class StepComparatorTest {
     
    private static final SimpleDateFormat yyyyMMdd = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
 
    public static void main(String[] args) {
         
        List<Step> list = new ArrayList<Step>();
        Step step1 = new Step();
        step1.setAcceptAddress("step1");
        step1.setAcceptTime("2015-12-11 00:00:00");
         
        Step step2 = new Step();
        step2.setAcceptAddress("step2");
        step2.setAcceptTime("2016-01-10 00:00:00");
         
        Step step3 = new Step();
        step3.setAcceptAddress("step3");
        step3.setAcceptTime("2013-12-12 00:00:00");
         
        list.add(step1);
        list.add(step2);
        list.add(step3);
         
        //对集合对象进行排序
/*      StepComparator comparator = new StepComparator();
        Collections.sort(list,comparator);
        for (Step step : list) {
            System.out.println(step.getAcceptAddress());
        }*/
        //结果(升序):step3 step1 step2
         
         
        /**
         * 当然我们还可以简化掉StepComparator类
         */
        Collections.sort(list,new Comparator<Step>() {
 
            @Override
            public int compare(Step o1, Step o2) {
                try {
                    Date acceptTime1 = yyyyMMdd.parse(o1.getAcceptTime());
                    Date acceptTime2 = yyyyMMdd.parse(o2.getAcceptTime());
                     
                    //对字段进行降序,如果要升序可以采用after方法
                    if (acceptTime1.before(acceptTime2)) {
                        return 1;
                    }
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                return -1;
            }
        });
         
        for (Step step : list) {
            System.out.println(step.getAcceptAddress());
        }
        //结果(降序):step2 step1 step3
         
         
        /**
         * 我们对map集合做一下排序,每次添加后对map集合进行自动排序!
         * 如果o1小于o2,返回一个负数。
         * 如果o1大于o2,返回一个正数。
         * 如果o1等于o2,则返回0
         */
        Map<Integer,String> map = new HashMap<Integer, String>();
        map = new TreeMap<Integer, String>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
//              return o2 - o1;//倒叙
//              return o1 - o2;//正序
//              return o1 - o2  > 0 ? -1 : 1;//倒序
                return o1 - o2  > 0 1 : -1;//正序
            }
        });
         
        map.put(5"5");
        map.put(3"3");
        map.put(2"2");
        map.put(1"1");
        map.put(4"4");
        System.out.println(map);
        //结果:{1=1, 2=2, 3=3, 4=4, 5=5}
    }
     
}