2016-11-06 125 views
1

我有一个ArrayList对象Foo(int id, Date date)java按当前日期排序然后按日期比较

我将如何去选此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 

前三名的目标是在未来的最接近排序(至今)第一,底部的两个都在排序过去最接近(到现在)。

+0

它不是重复的。这比仅仅通过属性排序更复杂。 – janos

+0

[*如何使用多个排序标准对AreayList进行排序*](http://stackoverflow.com/q/3704804)的副本。 **发布之前的搜索堆栈溢出**。 –

回答

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

即:

  • 如果这两个日期后,现在,正常的顺序进行排序(增加)
  • 如果两个日期都在现在之前,按相反顺序排序(递减)
  • 否则(=一个日期在现在,另一个在之后),按相反顺序对它们进行排序(=更新日期为f第一次,老年后来)
+0

谢谢你的排序正确。 –

1

通过date排序列表中,找到的最后一个项目比todaydate,从第一位置移动到物品找到的项目到列表的末尾。

+0

谢谢你的回复,我不太明白你的意思。 –