我有一个用Results填充的ArrayList,每个结果都有一个名为resultValue的属性,该属性存储一个double。我想基于属性resultValue的值对ArrayList进行排序,并能够像这样将其打印出来:


结果名称与resultValue
结果名称与resultValue
结果名称与resultValue


我的问题是:为什么这行不通?以及如何使它工作?

到目前为止,我已经在名为Result的类中完成了compareTo方法。看起来像这样:

public int compareTo(Result otherResult) {
    if (this.resultValue > otherResult.resultValue()) {
          return 1;
        } else if (this.resultValue < otherResult.resultValue()) {
          return -1;
        } else {
          return 0;
        }
    }


在包含存储结果的ArrayList的类中,我完成了以下方法:

void typeOutOrderedList() {
    Collections.sort(resultlist);
    for (int i = 0; i < resultlist.size(); i++) {
        Result res = resultlist.get(i);
        System.out.println(res.competitionStartNumber() + " has the result" + res.resultValue());
    }
}

最佳答案

您已经重新发明了轮子;使用JDK使您的代码更简单易读:

public int compareTo(Result otherResult) {
    return Double.compare(otherResult.resultValue(), resultValue());
}


还要注意传递给compare()的参数的顺序-这将为您提供所需的顺序(降序)。

关于java - 要基于属性的值对ArrayList进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34571007/

10-09 17:41