2016-11-06 211 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

謝謝你的回覆,我不太明白你的意思。 –