我试图通过声明我自己的匿名比较器来使用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;
}
}
});
结果不按排序顺序。
答案 0 :(得分:10)
就像亚当说的那样,只需:
Collections.sort(
arrlstContacts,
new Comparator<Contacts>()
{
public int compare(Contacts lhs, Contacts rhs)
{
return lhs.Name.compareTo(rhs.Name);
}
}
);
方法String.compareTo
执行字典比较,原始代码正在否定。例如,比较时的字符串number1
和number123
将分别产生-2和2。
通过简单地返回1,0或-1,有可能(正如你所发生的那样)使用Collections.sort
方法的合并排序的合并部分无法在列表中的字符串之间充分区分导致一个没有按字母顺序排序的列表。
答案 1 :(得分:7)
如Adam所示,您可以使用return (lhs.Name.compareTo(rhs.Name));
likeo:
Collections.sort(arrlstContacts, new Comparator<Contacts>() {
public int compare(Contacts lhs, Contacts rhs) {
return (lhs.Name.compareTo(rhs.Name));
}
});