3

独自の匿名コンパレータを宣言して、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

2 に答える 2

10

アダムが言うように、単純に:

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

このメソッドString.compareToは、元のコードが否定している辞書式比較を実行します。たとえば、文字列number1number123を比較すると、それぞれ-2と2が生成されます。

単に1、0、または-1を返すだけで、マージソート使用Collections.sortメソッドのマージ部分がリスト内の文字列を十分に区別できず、アルファベット順にソートされていないリストになる可能性があります。 。

于 2012-04-10T15:36:20.147 に答える
7

Adamが示しているように、次のように使用できますreturn (lhs.Name.compareTo(rhs.Name));

Collections.sort(arrlstContacts, new Comparator<Contacts>() {
     public int compare(Contacts lhs, Contacts rhs) {
         return (lhs.Name.compareTo(rhs.Name));
     }
});
于 2012-04-10T15:12:13.170 に答える