zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    [ARC101C] Ribbons on Tree
    NOIP2020 模拟赛 B 组 Day6
    #10471. 「2020-10-02 提高模拟赛」灌溉 (water)
    #10470. 「2020-10-02 提高模拟赛」流水线 (line)
    一类巧妙利用利用失配树的序列DP
    学军中学csp-noip2020模拟5
    信号与槽-高级应用
    PyQt5中的布局管理-QSplitter
    PyQt5中的布局管理-嵌套布局
    信号与槽-入门应用
  • 原文地址:https://www.cnblogs.com/yy3b2007com/p/6475998.html
Copyright © 2011-2022 走看看