2012-04-10 76 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