如何有条件地在 2 个对象上使用 java compareTo()?

How to use java compareTo() on 2 objects conditionally?

如果 2 个学生的教育水平相同,我必须根据平均分数比较 2 个学生对象。 return 在 if 语句之外要做什么?

public int compareTo(Student o) {

if(this.getLevel() == o.getLevel()) {
    if(this.getAverage() > o.getAverage()) {
        return 1;
    } else if(this.getAverage() < o.getAverage()) {
        return -1;
    } else {
        return 0;
    }
} 

}   

比较水平。如果是整数:

return Integer.compare(getLevel(), o.getLevel());

完整代码:

int comparison = Integer.compare(getLevel(), o.getLevel());
if (comparison == 0) {
    comparison = Integer.compare(getAverage(), o.getAverage());
}
return comparison;

首先比较水平,如果结果是0,比较平均值:

public int compareTo(Student o) {
    int result = Integer.compare(this.getLevel(), o.getLevel());
    if (result == 0) {
        result = Integer.compare(this.getAverage(), o.getAverage());
    }
    return result;
}

还有一种更高级的方法可以使用 Java 8+

中的 Comparator 界面
public int compareTo(Student o) {
    return Comparator.comparingInt(Student::getLevel)
                     .thenComparingInt(Student::getAverage)
                     .compare(this, o);
}