1

这是 Employee 类的一个方法。它比较employee 的两个对象,包含四个变量:id(一个int)、name、phone 和job title(所有字符串)。

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 之后继续比较可能看起来违反直觉,这在逻辑上是唯一的,但顺其自然!

4

2 回答 2

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;
 }
于 2013-03-25T00:12:26.620 回答
0

有关如何实现项目的多级顺序的示例,请参阅集合排序多项目。

我认为如果您只返回 compareTo 调用的结果,而不是使用 if-else 并返回 0/1,那么代码可以变得更短。

于 2013-03-25T00:05:42.097 回答