[英]Sorting custom class array-list string using Collections.sort
我正在尝试通过声明我自己的匿名比较器来使用 Collections.sort 对我的自定义 class 数组列表进行排序。 但是排序没有按预期工作。
我的代码是
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;
}
}
});
结果未按排序顺序排列。
正如 Adam 所说,只需执行以下操作:
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
方法有可能(正如您正在发生的那样)无法充分区分列表中的字符串,从而导致列表不是' t 按字母顺序排序。
正如 Adam 所指出的,您可以使用return (lhs.Name.compareTo(rhs.Name));
喜欢这样:
Collections.sort(arrlstContacts, new Comparator<Contacts>() {
public int compare(Contacts lhs, Contacts rhs) {
return (lhs.Name.compareTo(rhs.Name));
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.