java按当前日期排序列表,然后按日期比较

时间:2016-11-06 06:54:07

标签: java list date arraylist comparator

我有一个对象Foo(int id, Date date)的ArrayList。

我如何将此ArrayList排序为下面的内容

    id = 3, date = 07 Nov 2016
    id = 2, date = 08 Nov 2016
    id = 5, date = 30 Nov 2016
    id = 1, date = 05 Nov 2016
    id = 4, date = 04 Nov 2016

将来排名前三位的对象(最接近现在)排在第一位,过去排在后面的两位是过去排在第一位(最近)。

2 个答案:

答案 0 :(得分:1)

date对列表进行排序,找到date小于today的最后一项,将项目从第一项移至找到的项目到列表末尾。

答案 1 :(得分:1)

要按多个条件排序,您需要一个复合比较器:

Collections.sort(dates, (d1, d2) -> {
    if (d1.after(now) && d2.after(now)) {
        return d1.compareTo(d2);
    }
    if (d1.before(now) && d2.before(now)) {
        return -d1.compareTo(d2);
    }
    return -d1.compareTo(d2);
});

那是:

  • 如果两个日期都在之后,请按正常顺序对其进行排序(增加)
  • 如果两个日期都在之前,请按相反的顺序排序(减少)
  • 否则(=一个日期在此之前,另一个日期在之后),按相反的顺序排序(=较新的日期为先,较旧的日期为晚)