在compareTo方法中整理if / else语句

时间:2013-03-25 00:00:35

标签: java if-statement

这是一个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之后继续比较可能看起来违反直觉,这在逻辑上是独一无二的,但只是滚动它!

2 个答案:

答案 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,代码可以缩短得多。