使用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
方法执行字典比较,原始代码为否定。 例如,比较时的字符串number1
和number123
将分别产生-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)); } });