我可以使用它按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;
答案 0 :(得分:45)
您需要使用的是字符串的compareTo()
方法。
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;
}
}
答案 1 :(得分:7)
非常确定您的代码可以像这样编写:
public int compareTo(Emp other)
{
return this.getName().compareTo(other.getName());
}
答案 2 :(得分:4)
Java String已经实现了Comparable。所以你可以简单地把你的方法写成
public int compareTo(Emp emp) {
return this.getName().compareTo(emp.getName());
}
(当然要确保添加适当的验证,例如空检查等)
同样在您的代码中,不要尝试使用'=='来比较字符串。改为使用'equals'方法。 '=='仅比较字符串引用,而equals在语义上比较两个字符串。
答案 3 :(得分:3)
你不需要把我施展给Emp,它已经是一个Emp:
public int compareTo(Emp i) {
return getName().compareTo(i.getName());
}
答案 4 :(得分:1)
应该不是
if (this.getName() == ((Emp ) i).getName())
是
if (this.getName().equals(i.getName()))