2016-11-06 5 views
1

私はオブジェクトのArrayListを持っていますFoo(int id, Date date)。私は現在の日付で日付順のJavaソートリスト

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 

の下にトップ3つのオブジェクトは、(現在の)最も近い順にソート将来的には最初、下の二つが過去にによって並べ替えられているようなものを見て、このArrayListの仕分けに行くかどう

一番近い(現在まで)最初に。

+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の最後のアイテムをtodayより小さく、最初から見つかったアイテムからリストの最後に移動します。

+0

返事をありがとう、私はあなたが何を意味したか分かりませんでした。 –

関連する問題