使用Collections.sort对自定义类数组列表字符串进行排序

我试图通过声明我自己的匿名比较器使用Collections.sort对我的自定义类数组列表进行排序。 但这种方式并没有按预期运作。

我的代码是

Collections.sort(arrlstContacts, new Comparator() { 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; } } }); 

结果不是按排序顺序排列的。

就像亚当说的那样,只需:

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

String.compareTo方法执行字典比较,原始代码为否定。 例如,比较时的字符串number1number123将分别产生-2和2。

通过简单地返回1,0或-1,有可能(正如你所发生的那样)使用Collections.sort方法的合并排序的合并部分无法在列表中的字符串之间充分区分,从而导致列表不是’按字母顺序排序。

如Adam所示,您可以使用return (lhs.Name.compareTo(rhs.Name)); likeso:

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