2016-09-05 9 views
-1

コンパイラを使用してリストをソートしていますが、このエラーが発生しました。 ここに私のコードです。Javaコードの並べ替え整数のリストのリスト

// The comparators 
Comparator<List<Integer>> comparator_rows = new Comparator<List<Integer>>() { 

    @Override 
    public int compare(List<Integer> o1, List<Integer> o2) { 
     if(o1.get(0) != o2.get(0)) 
      return Integer.compare(o1.get(0), o2.get(0)); 
     else if(o1.get(1) != o2.get(1)) 
      return Integer.compare(o1.get(1), o2.get(1)); 
     else if(o1.get(2) != o2.get(2)) 
      return Integer.compare(o1.get(2), o2.get(2)); 
     else if(o1.get(3) != o2.get(3)) 
      return Integer.compare(o1.get(3), o2.get(3)); 
     else if(o1.get(4) != o2.get(4)) 
      return Integer.compare(o1.get(4), o2.get(4)); 
     else if(o1.get(5) != o2.get(5)) 
      return Integer.compare(o1.get(5), o2.get(5)); 
     else if(o1.get(6) != o2.get(6)) 
      return Integer.compare(o1.get(6), o2.get(6)); 
     else 
      return Integer.compare(o1.get(7), o2.get(7)); 
    } 

}; 

Collections.sort(list, comparator_rows); 

// test print 
for(int i=0; i<100; i++){ 
    Iterator<Integer> myListIterator = list.get(i).iterator(); 
    System.out.print(i + " "); 
    while (myListIterator.hasNext()) { 
     Integer val = myListIterator.next();  
     System.out.print(val + " "); 
    } 
    System.out.println(); 
} 

そして、私はこの結果を得た:私は次元数2を起動するための結果ではないだ、なぜ誰もが

1 3000 299 1818 3000 3000 3000 1969 15426 
1 3000 1499 1808 3000 3000 1174 1995 18813 
1 3000 155 1927 3000 786 1107 783 26753 
1 3000 1999 681 3000 355 1314 3000 28976 

を知っていますか? ありがとうございます。

+1

出力を生成するコードを提示してください。 –

+0

@Samuel already – DanielH

+0

あなたは整数のリストではなく、リストのリストを扱います。 –

答えて

2

単に整数を==と!=で比較することはできません。代わりにEqualsを使用してください。

if(!o1.get(0).equals(o2.get(0))) 
    return Integer.compare(o1.get(0), o2.get(0)); 

Listの要素がnullの場合、NullPointerExceptionsが発生する可能性があるので注意してください。

も参照してください。Java: Integer equals vs. ==

+0

手伝い! – DanielH

0

IntegerがComparableインターフェイスを実装しているため、Integer用のコンパレータを記述する必要はありません。

それは、並べ替えるには十分だ:

Collections.sort(list); 

しかし、あなたはまだいくつかのカスタムロジックでカスタムコンパレータを作成する必要がある場合は、これを試すことができます(コンパレータ内部で独自のロジックを足すOFC)

Collections.sort(list, new Comparator<Integer>() { 

    public int compare(Integer o1, Integer o2) { 
     return Integer.compare(o1, o2); 
    } 
}); 
+0

私は整数リストのリストを持っているので、Collections.sort(list)を直接使用することはできません。属性1、2、3に基づいて各行をソートしたいのですが... – DanielH

関連する問題