2012-04-10 220 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 2012-04-10 14:58:19

+0

在哪些情況下這不起作用?嘗試通過調試器和/或編寫一些單元測試。 – elevine 2012-04-10 15:00:10

+0

@亞當,感謝隊友...它的工作... – kaibuki 2012-04-10 15:05:55

回答

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。

通過簡單地返回1,0或-1,有一個機會(就像發生在你身上)合併排序使用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

可能想引用[亞當的評論](http://stackoverflow.com/questions/10091110/sorting-custom-class-array-list-string-using-集合排序#comment12923708_10091110)。 – 2012-04-10 15:14:28

+0

沒有看到它已經在評論中回答了。編輯...謝謝! – 2012-04-10 15:28:12