public static final Comparator<Summary> COMPARATOR = (courseModel1, courseModel2) -> {
if (courseModel1.department.compareTo(courseModel2.department) > 0) {
return courseModel1;
}
if (courseModel1.department.compareTo(courseModel2.department) < 0) {
return courseModel2;
}
if (courseModel1.department.compareTo(courseModel2.department) == 0) {
if (courseModel1.number.compareTo(courseModel2.number) > 0) {
return courseModel1;
}
if (courseModel1.number.compareTo(courseModel2.number) < 0) {
return courseModel2;
}
if (courseModel1.number.compareTo(courseModel2.number) == 0) {
if (courseModel1.title.compareTo(courseModel2.title) > 0) {
return courseModel1;
}
if (courseModel1.title.compareTo(courseModel2.title) < 0) {
return courseModel2;
}
}
}
// (ERROR: missing a return statement here)
};
2 回答
2
返回负整数、零或正整数,因为第一个参数小于、等于或大于第二个。
所以你的代码需要返回一个整数而不是对象。如果第一个参数小于第二个,返回-1,如果第一个参数大于第二个,返回1,如果对象相等返回0。目前,它正在返回参数之一。
编译错误的原因missing a return statement是缺少分支,您的代码可以if/else用来确保覆盖所有分支,而不仅仅是ifs,或者在末尾添加默认返回值。
于 2020-11-02T02:20:46.370 回答
0
首先,比较器返回int描述两个对象之间的关系。它们不返回比较对象。
因此,您可能希望按如下方式简化比较器。这首先检查是否相等(== 0)。如果不相等,则根据后续比较返回 -1 或 1(它必须是一个或另一个)。否则,继续下一个测试并检查数字是否相等,如果相等,则返回比较标题的数字结果,不管。它看起来像这样。
Comparator<Summary> COMPARATOR =
(courseModel1, courseModel2) -> {
if (courseModel1.department.compareTo(
courseModel2.department) != 0) {
return courseModel1.department
.compareTo(courseModel2.department);
}
if (courseModel1.number
.compareTo(courseModel2.number) != 0) {
return courseModel1.number
.compareTo(courseModel2.number);
}
// in the last case, just return the overall comparison (-1,0, or 1).
return courseModel1.title
.compareTo(courseModel2.title);
};
但这可以通过使用Comparator接口提供的方法进一步简化。在每种情况下,它都会返回比较基于哪个小或大的汇总字段的结果。如果它们相等,则比较器将尝试数字,然后是标题。
Comparator<Summary> comp =
Comparator.comparing(Summary::getDepartment)
.thenComparing(Summary::getNumber)
.thenComparing(Summary::getTitle);
无论比较器的形式如何,您都可以这样使用它。
Summary sum1 = ...
Summary sum2 = ...
int cmp = COMPARATOR.compare(sum1,sum2);
if (cmp < 0) {
// do something with sum1.
} else if (cmp > 0) {
// do something with sum2.
} else {
// take some action as required.
}
被比较的班级
class Summary {
public String department;
public String title;
public Integer number;
public String getDepartment() {
return department;
}
public String getTitle() {
return title;
}
public Integer getNumber() {
return number;
}
}
于 2020-11-02T02:24:12.390 回答
