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);
        }