2017-10-07 8 views
-2

私はどのように私はその日((18/03/2017)の後に(14/07/2017)とと)2017年12月9日(後の最初のリスト)のためにそれを私のどのようにして、値のdouble配列リストを並べ替えることができますか?

ArrayList<ArrayList<String>> list = 
    [["12","09","2017","Event n 1"], 
    ["14","07","2017","Event n 2"], 
    ["18","03","2017","Event n 3"] 
    ] 

を並べ替えることができています?

+0

、あなたは...さらに良い 'ArrayList'の日付のデータ型を使用する必要がありますが、クラスとしての日付を保持しているクラス' Event'だろうメンバー。 – deHaar

答えて

2

あなたはintに関連する各要素を解析し、それらを比較して、カスタムコンパレータを作成することができます。

list.sort(Comparator.comparingInt((List<String> x) -> Integer.parseInt(x.get(2))) 
      .thenComparingInt(x -> Integer.parseInt(x.get(1))) 
      .thenComparingInt(x -> Integer.parseInt(x.get(0)))); 

EDIT:
は、Java 8の機能を使用できない場合、あなたはまだやることができますこの、それはかなりclunkier次のようになります。

Javaで
Collections.sort(list, new Comparator<List<String>>() { 
    @Override 
    public int compare(List<String> o1, List<String> o2) { 
     int retVal = Integer.compare(getIntByIndex(o1, 2), getIntByIndex(o2, 2)); 
     if (retVal != 0) { 
      return retVal; 
     } 

     retVal = Integer.compare(getIntByIndex(o1, 1), getIntByIndex(o2, 1)); 
     if (retVal != 0) { 
      return retVal; 
     } 

     return Integer.compare(getIntByIndex(o1, 0), getIntByIndex(o2, 0)); 
    } 

    private int getIntByIndex(List<String> sublist, int index) { 
     return Integer.parseInt(sublist.get(index)); 
    } 
}); 
+0

x.get(number)が動作しない理由がわかりません –

+0

@LorenzoCampanaその声明を明確にするよう気をつけますか?何がうまくいかない? – Mureinik

+0

エラー:ジャックはJava 8言語機能をサポートする必要があります。ジャックを有効にするか、sourceCompatibility JavaVersion.VERSION_1_8を削除してください。 –

関連する問題