2012-04-10 15 views
3

私自身の匿名コンパイラを宣言してCollections.sortを使用してカスタムクラスの配列リストをソートしようとしています。しかし、ソートは期待どおりに動作していません。Collections.sortを使用してカスタムクラスの配列リストの文字列をソート

私のコードは

Collections.sort(arrlstContacts, new Comparator<Contacts>() { 

     public int compare(Contacts lhs, Contacts rhs) { 

      int result = lhs.Name.compareTo(rhs.Name); 

      if(result > 0) 
      { 
       return 1; 

      } 
      else if (result < 0) 
      { 
       return -1; 
      } 
      else 
      { 
       return 0; 
      } 
     } 
    }); 

結果がソートされた順序ではないです。

+4

"return lhs.Name.compareTo(rhs.Name)"を使用することができますか? – Adam

+0

これはどの条件の下で動作しませんか?デバッガでステップ実行したり、単体テストを書いたりしてください。 – elevine

+0

@Adam、ありがとうございました...それは働きました... – kaibuki

答えて

9

は、単に実行します。

Collections.sort(
    arrlstContacts, 
    new Comparator<Contacts>() 
    { 
    public int compare(Contacts lhs, Contacts rhs) 
    { 
     return lhs.Name.compareTo(rhs.Name); 
    } 
    } 
); 

あなたの元のコードが否定された辞書式比較を実行するString.compareTo方法。たとえば、文字列number1number123を比較すると、それぞれ-2と2が生成されます。

マージソートのマージ部分がCollections.sortの方法では、リスト内の文字列間で十分に区別できない可能性があります(おそらく起きているようです)。アルファベット順にソートされていません。

7

アダムによって示されるように、あなたはreturn (lhs.Name.compareTo(rhs.Name)); likeso使用することができます:アダムが言うのように

Collections.sort(arrlstContacts, new Comparator<Contacts>() { 
    public int compare(Contacts lhs, Contacts rhs) { 
     return (lhs.Name.compareTo(rhs.Name)); 
    } 
}); 
+0

[Adamのコメント](http://stackoverflow.com/questions/10091110/sorting-custom-class-array-list-string-using-コレクション - ソート#comment12923708_10091110)。 –

+0

コメントに既に回答しているのを確認できませんでした。編集中...ありがとう! –

関連する問題