Java:List集合内的对象进行排序

List集合中的对象进行排序,除了for外,还有java的Collections对象来对摸个集合进行排序的用法。

比如说我有一个List集合,集合元素为:

复制代码
public class TaskAutoExecutePlan{
    private String id = null;
    private AutoExecutePlanType autoExecutePlanType;
    private TaskStatus taskStatus;
    private String parameters;
    private Date createDate;
    private Date completeDate;
    private Date modifyDate;


    /**get set 方法*/
}

public enum  AutoExecutePlanType {
    ImportSiteCellParameter(2),
    WIFI(32);
    /*构造函数等*/
}
复制代码

如果我需要先按照AutoExecutePlanType进行升序排序,在对CreateDate进行升序排序,使用Collections.sort()该怎么实现呢?

复制代码
 1 public static void main(String[] args) {
 2     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS");
 3     Date now = new Date();
 4     List<TaskAutoExecutePlan> items = new ArrayList<>();
 5 
 6     try {
 7         Thread.sleep(10000);
 8     } catch (InterruptedException e) {
 9         e.printStackTrace();
10     }
11 
12     TaskAutoExecutePlan plan = new TaskAutoExecutePlan();
13     plan.setId(UUID.randomUUID().toString());
14     plan.setCreateDate(new Date());
15     plan.setAutoExecutePlanType(AutoExecutePlanType.ImportSiteCellParameter);
16     items.add(plan);
17 
18 
19     plan = new TaskAutoExecutePlan();
20     plan.setId(UUID.randomUUID().toString());
21     plan.setCreateDate(now);
22     plan.setAutoExecutePlanType(AutoExecutePlanType.ImportSiteCellParameter);
23     items.add(plan);
24 
25     plan = new TaskAutoExecutePlan();
26     plan.setId(UUID.randomUUID().toString());
27     plan.setCreateDate(now);
28     plan.setAutoExecutePlanType(AutoExecutePlanType.WIFI);
29     items.add(plan);
30 
31     plan = new TaskAutoExecutePlan();
32     plan.setId(UUID.randomUUID().toString());
33     plan.setCreateDate(new Date());
34     plan.setAutoExecutePlanType(AutoExecutePlanType.WIFI);
35     items.add(plan);
36 
37     System.out.println("before sort:");
38     for (TaskAutoExecutePlan item : items) {
39         System.out.println(item.getId() + ":" + item.getAutoExecutePlanType() + ":" + format.format(item.getCreateDate()));
40     }
41 
42     Collections.sort(items, new Comparator<TaskAutoExecutePlan>() {
43         @Override
44         public int compare(TaskAutoExecutePlan o1, TaskAutoExecutePlan o2) {
45             int i = o1.getAutoExecutePlanType().getValue() - o2.getAutoExecutePlanType().getValue();
46             if (i == 0) {
47                 if (o1.getCreateDate().equals(o2.getCreateDate())) {
48                     return 0;
49                 } else if (o1.getCreateDate().after(o2.getCreateDate())) {
50                     return 1;
51                 } else {
52                     return -1;
53                 }
54             }
55             return i;
56         }
57     });
58 
59     System.out.println("after sort:");
60     for (TaskAutoExecutePlan item : items) {
61         System.out.println(item.getId() + ":" + item.getAutoExecutePlanType() + ":" + format.format(item.getCreateDate()));
62     }
63 }
复制代码

输出结果:

before sort:
252409be-1bb2-4502-8796-167b43d8de92:ImportSiteCellParameter:2017-02-27 19:36:11.000320
fd7dc92b-b0f4-423a-8644-d95ea0bc6cab:ImportSiteCellParameter:2017-02-27 19:36:00.000294
42bc8d28-90c4-4563-83a3-215c38bc0f9e:WIFI:2017-02-27 19:36:00.000294
d25d4201-f776-4b5f-bf33-8b1f8b80c412:WIFI:2017-02-27 19:36:11.000327
after sort:
fd7dc92b-b0f4-423a-8644-d95ea0bc6cab:ImportSiteCellParameter:2017-02-27 19:36:00.000294
252409be-1bb2-4502-8796-167b43d8de92:ImportSiteCellParameter:2017-02-27 19:36:11.000320
42bc8d28-90c4-4563-83a3-215c38bc0f9e:WIFI:2017-02-27 19:36:00.000294
d25d4201-f776-4b5f-bf33-8b1f8b80c412:WIFI:2017-02-27 19:36:11.000327



感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮。本文欢迎各位转载,但是转载文章之后必须在文章页面中给出作者和原文连接
posted @   cctext  阅读(1306)  评论(0编辑  收藏  举报
编辑推荐:
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
阅读排行:
· [翻译] 为什么 Tracebit 用 C# 开发
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
点击右上角即可分享
微信分享提示