如何有条件地在 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);
}
如果 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);
}