这是一个Employee类的方法。它比较了员工的两个对象,包含四个变量:id(一个int),名称,电话和职称(所有字符串)。
public int compareTo(Employee other) {
if (this.id == other.id) {
if (this.name.compareTo(other.name) == 0) {
if (this.phoneNumber.compareTo(other.phoneNumber) == 0) {
if (this.jobTitle.compareTo(other.jobTitle) == 0)
return 0;
else if (this.jobTitle.compareTo(other.jobTitle) > 0)
return 1;
else
return -1;
}
else if (this.phoneNumber.compareTo(other.phoneNumber) > 0)
return 1;
else
return -1;
}
else if (this.name.compareTo(other.name) > 0)
return 1;
else
return -1;
}
else if (this.id > other.id)
return 1;
else
return -1;
}
代码工作正常,但我知道它变得相当箭头形状,有点复杂。有没有人有关于清理if / else语句集合的建议?
编辑:我知道在ID之后继续比较可能看起来违反直觉,这在逻辑上是独一无二的,但只是滚动它!
答案 0 :(得分:1)
似乎所有支票都必须== 0,才能返回0.如果其中一个是> 0,它返回1,否则返回-1;
所以:
if (this.id == other.id &&
this.name.compareTo(other.name) == 0 &&
this.jobTitle.compareTo(other.jobTitle) == 0 &&
this.phoneNumber.compareTo(other.phoneNumber) == 0 ) {
return 0;
} else if (this.id > other.id ||
(this.name.compareTo(other.name) > 0 ||
this.jobTitle.compareTo(other.jobTitle) > 0 ||
this.phoneNumber.compareTo(other.phoneNumber) > 0) {
return 1;
} else {
return -1;
}
答案 1 :(得分:0)
有关如何实施多级订单的示例,请参阅collection sort multi items。
我认为如果只返回compareTo调用的结果,而不是使用if-else并返回0/1,代码可以缩短得多。