有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个对象的数组列表Foo(int id, Date date)

我如何对这个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) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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

    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);
    });
    

    即:

    • 如果两个日期都在现在之后,则按正常顺序排序(递增)
    • 如果两个日期都早于现在,则按相反顺序排序(递减)
    • 否则(=一个日期在现在之前,另一个在之后),按相反顺序排序(=较新的日期先到,较旧的日期后到)