現在の日付に対するソートのJavaコレクション

koflox:

私たちは、リスト内の次のアイテムを持っている、たとえば、現在の日付に日付の相対的な私のリストをソートします:

10.01.2018, 
10.20.2018, 
10.14.2018, 
10.02.2018 

そして、現在の日付です10.08.2018

結果は次の順序で配列のソートを昇順する必要があります。

10.14.2018, 
10.20.2018    and then 
10.01.2018, 
10.02.2018. 

最初は実現しなかった日数、その後、過去の日付でなければなりません。コンパレータでそれを行うにはどのように?

azro:

あなたはこの方法を見ることができます

  • あなたが比較している二つの日付が今日の(前後または両方の両方)を同じ側にある場合、通常はそれらを比較
  • あなたは順序を逆にする必要があります後、あなたは前に1つずつを持っている場合

これは維持されますascending orderが、過去の日付の前に未来の日付を入れて

public static void main(String[] args) {
    List<LocalDate> list = Arrays.asList(
                                      LocalDate.of(2018, 10, 1), LocalDate.of(2018, 10, 20),
                                      LocalDate.of(2018, 10, 14),LocalDate.of(2018, 10, 2));
    System.out.println(list);
    LocalDate now = LocalDate.now();

    list.sort((o1, o2) -> {
        if (o1.isBefore(now) && o2.isBefore(now) || o1.isAfter(now) && o2.isAfter(now)) {
            return o1.compareTo(o2);
        }
        return o2.compareTo(o1);
    });

    System.out.println(list);
}


[2018-10-01, 2018-10-20, 2018-10-14, 2018-10-02]
[2018-10-14, 2018-10-20, 2018-10-01, 2018-10-02]

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=177964&siteId=1