25

我可以使用它按 emp id 排序,但我不确定是否可以比较字符串。我收到一个错误,该运算符未为字符串定义。

public int compareTo(Emp i) {
            if (this.getName() == ((Emp ) i).getName())
                return 0;
            else if ((this.getName()) > ((Emp ) i).getName())
                return 1;
            else
                return -1;
4

5 回答 5

50

您需要使用的是compareTo()Strings的方法。

return this.getName().compareTo(i.getName());

那应该做你想做的事。

通常在实现Comparable接口时,你只会结合使用Comparable类的其他成员的结果。

下面是一个非常典型的compareTo()方法实现:

class Car implements Comparable<Car> {
    int year;
    String make, model;
    public int compareTo(Car other) {
        if (!this.make.equalsIgnoreCase(other.make))
            return this.make.compareTo(other.make);
        if (!this.model.equalsIgnoreCase(other.model))
            return this.model.compareTo(other.model);
        return this.year - other.year;
    }
}
于 2010-09-20T05:02:39.367 回答
10

很确定你的代码可以这样写:

public int compareTo(Emp other)
{
    return this.getName().compareTo(other.getName());
}
于 2010-09-20T05:06:12.887 回答
6

Java String已经实现了 Comparable。所以你可以简单地把你的方法写成

public int compareTo(Emp emp) {
   return this.getName().compareTo(emp.getName());
}

(当然,请确保您添加了正确的验证,例如空检查等)

同样在您的代码中,不要尝试使用“==”比较字符串。请改用“等于”方法。'==' 仅比较字符串引用,而equals在语义上比较两个字符串。

于 2010-09-20T05:05:14.150 回答
3

您不需要将 i 转换为 Emp,它已经是 Emp:

public int compareTo(Emp i) {
    return getName().compareTo(i.getName());
}
于 2010-09-20T05:05:07.603 回答
1

不应该

if (this.getName() == ((Emp ) i).getName())

if (this.getName().equals(i.getName()))

于 2010-09-20T05:04:12.160 回答