Java compareTo 方法未按预期工作
Java compareTo method not working as expected
我有一个包含以下内容的数组列表:
{a2.name, a4.name, tr.prod_date, a3.name, a1.name, a5.name, a6.name, a7.name, a8.name, a9.name, a10.name}
在我的方法中 - 我尝试比较字段并对它们进行排序,以便它们按字母顺序返回。
Collections.sort(dataJSON, new Comparator() {
public int compare(Object obj1, Object obj2) {
return ((ReportDetail) obj1).getReportColumn().compareTo(((ReportDetail) obj2).getReportColumn());
}
});
不幸的是,我看到的结果是 a10.name 将领先于 a2.name - 我是否遗漏了什么或者我应该采取另一种方法吗?
它正在进行字符串比较,因为您没有提供自己的比较方法。因此,您看到的是一个字符一个字符的比较。这意味着 'a' == 'a' , '1' < '2' 所以它会脱落并按照您看到的顺序对它们进行排序。你需要自己编写 compareTo。
您可以自定义 Comparator
喜欢 ReportComparator implements Comparator<ReportDetail>
然后添加
public int compare(ReportDetail r1, ReportDetail r2) {
return Long.valueOf(r1.getReportColumn.subString(1,r1.getReport().length() - 1) -Long.valueOf(r2.getReportColumn.subString(1,r2.getReport().length() - 1);
}
我有一个包含以下内容的数组列表:
{a2.name, a4.name, tr.prod_date, a3.name, a1.name, a5.name, a6.name, a7.name, a8.name, a9.name, a10.name}
在我的方法中 - 我尝试比较字段并对它们进行排序,以便它们按字母顺序返回。
Collections.sort(dataJSON, new Comparator() {
public int compare(Object obj1, Object obj2) {
return ((ReportDetail) obj1).getReportColumn().compareTo(((ReportDetail) obj2).getReportColumn());
}
});
不幸的是,我看到的结果是 a10.name 将领先于 a2.name - 我是否遗漏了什么或者我应该采取另一种方法吗?
它正在进行字符串比较,因为您没有提供自己的比较方法。因此,您看到的是一个字符一个字符的比较。这意味着 'a' == 'a' , '1' < '2' 所以它会脱落并按照您看到的顺序对它们进行排序。你需要自己编写 compareTo。
您可以自定义 Comparator
喜欢 ReportComparator implements Comparator<ReportDetail>
然后添加
public int compare(ReportDetail r1, ReportDetail r2) {
return Long.valueOf(r1.getReportColumn.subString(1,r1.getReport().length() - 1) -Long.valueOf(r2.getReportColumn.subString(1,r2.getReport().length() - 1);
}