2011-01-15 13 views
12

ArrayList<String[]>をJavaでソートする最良の方法は何ですか?JavaでArrayのArrayListを並べ替える

のString [] ...

String[] = new String[] { "abc", "abc", "abc", "abc", "abc", "abc", "abc" }; 

は、今私は(インデックス1で)[]文字列の2番目の値で全体のArrayListをソートしたいです。私はそれぞれのString []とその子をインデックス1にループする必要があります。

アイデア? EDITED


は、私はより多くの記述があります。私は実際にいくつかのXMLファイルから学校を取得しており、XMLのすべてのノードには7つの属性があります。今私はXMLとString []配列からそれらの学校のノードを保持しているString []のArrayListを作成しています。配列自体は特定のノードの属性を保持しています。

ここでは、XMLの2番目の属性である学校の状態と、ArrayListのString []のインデックス1に従ってソートする必要があります。

私は各学校(XMLのノード、JavaのString []のノード)を最初にループする必要があります。その後State(XMLではState属性、JavaではString [1])をフィルタリングする必要があります。

今はっきりしていますか?

+3

私はどこでも任意のArrayListに表示されていない、とすべてのもの:ちょうど書き:たとえば

list.sort(Comparator.comparing(a -> a[1])); 

、次のコード:

List<String[]> list = Arrays.asList( new String[] { "abc", "abc", "abc", "abc", "abc", "abc", "abc" }, new String[] { "xyz", "xyz", "xyz", "xyz", "xyz", "xyz", "xyz" }, new String[] { "fgh", "fgh", "fgh", "fgh", "fgh", "fgh", "fgh" }); list.sort(Comparator.comparing(a -> a[1])); list.stream().map(Arrays::toString).forEach(System.out::println); 

募集の結果が得られます配列は同じです... – BoltClock

+1

少し説明してみてください、いくつかの入力パラメータと例外的な結果を投稿してください。 – Crozin

答えて

28

スタート。これにもカスタムComparatorを書く必要があります。

public static void main(String[] args) throws Exception { 
     ArrayList<String[]> listOfStringArrays = new ArrayList<String[]>(); 
     listOfStringArrays.add(new String[] {"x","y","z"}); 
     listOfStringArrays.add(new String[] {"a","b","c"}); 
     listOfStringArrays.add(new String[] {"m","n","o"}); 
     Collections.sort(listOfStringArrays,new Comparator<String[]>() { 
      public int compare(String[] strings, String[] otherStrings) { 
       return strings[1].compareTo(otherStrings[1]); 
      } 
     }); 
     for (String[] sa : listOfStringArrays) { 
      System.out.println(Arrays.toString(sa)); 
     } 
     /* prints out 
      [a, b, c] 
      [m, n, o] 
      [x, y, z] 
     */ 

    } 
3

String[]を2つ比較したComparatorを入力してから、Collections.sort(List<T> list, Comparator<? super T> c)に渡します。

4

あなたがそうのようなComparator<String[]>を作成します:あなたは彼らのcompareToメソッドで定義された文字列の自然な順序に依存したく仮定例えば

new Comparator<String[]>() { 
    public int compare(String[] first, String[] second) { 
    return first[1].compareTo(second[1]); 
    } 
} 

を、その後にそれを渡しますCollections.sort()

2番目の要素が実際に配列に存在するかどうかを確認したい場合があります。また、標準の文字列の比較では十分でない場合は、カスタム比較を行うこともできます。

+0

私はどのように昇順でStateによってArrayList全体をソートするか考えていますか? – Neutralizer

+1

ジョーンと私がそれを提示する方法は、昇順になります。別の順序でそれを望むなら、String.compareTo(String)から返された値を無効にするか、初めてソートした後でCollections.reverse(yourList)を呼び出すことができます。 – whaley

0

あなたの編集に基づいて:Your String []あなたの属性を含むSchoolオブジェクトでなければなりません。あなたのSchoolオブジェクトをComparableに実装し、Collections.sort()で簡単にソートできるようにします。

0

これはJava 8で非常に簡単です。あなたの文字列の

[abc, abc, abc, abc, abc, abc, abc] 
[fgh, fgh, fgh, fgh, fgh, fgh, fgh] 
[xyz, xyz, xyz, xyz, xyz, xyz, xyz] 
関連する問題