Java Stream:按其中一个非null日期字段排序

时间:2018-05-25 02:05:02

标签: sorting date null java-stream

我的对象有多个日期字段date1date2date3date1不为null,因为其他两个日期可以为空。我想用以下规则

对这些对象的列表进行排序
  1. 如果date2为空,请使用date1,否则请使用date2
  2. 将第1步输出与date3进行比较,然后按降序排序。
  3. 以下是我的豆。

    class obj {
        private Date date1;
        private Date date2;
        private Date date3;
    
        obj(Date date1, Date date2, Date date3) {
            this.date1 = date1;
            this.date2 = date2;
            this.date3 = date3;
        }
    
        public Date getDate1() {
            return date1;
        }
    
        public void setDate1(Date date1) {
            this.date1 = date1;
        }
    
        public Date getDate2() {
            return date2;
        }
    
        public void setDate2(Date date2) {
            this.date2 = date2;
        }
    
        public Date getDate3() {
            return date3;
        }
    
        public void setDate3(Date date3) {
            this.date3 = date3;
        }
    }
    

    我的排序列表看起来像

    List<obj> aList = Arrays.asList(
                    new obj(parseDate("1/1/2018"), null, null),
                    new obj(parseDate("4/4/2018"), null, parseDate("6/6/2018")),
                    new obj(parseDate("7/7/2018"), parseDate("8/8/2018"), null)
            );
    

    目前,我正在使用流来做这件事。

    1. 对具有date3并获取最大日期对象的对象进行排序
    2. 对具有date2并获取最大日期对象的对象进行排序
    3. 如果步骤2结果为null,则对具有date1并获取最大日期对象的对象进行排序
    4. 比较步骤1和步骤2/3输出并排序
    5. 有没有更好更短的方法呢?

0 个答案:

没有答案