Как использовать Comparable CompareTo on Strings в Java
Я могу использовать его для сортировки по emp id, но я не уверен, можно ли сравнивать строки. Я получаю сообщение об ошибке для оператора undefined для строк.
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;
Ответы
Ответ 1
Что вам нужно использовать, это метод 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;
}
}
Ответ 2
Довольно уверен, что ваш код можно просто написать следующим образом:
public int compareTo(Emp other)
{
return this.getName().compareTo(other.getName());
}
Ответ 3
Java String уже реализует Comparable. Таким образом, вы можете просто написать свой метод как
public int compareTo(Emp emp) {
return this.getName().compareTo(emp.getName());
}
(конечно же, убедитесь, что вы добавили правильные проверки, такие как нулевые проверки и т.д.)
Также в вашем коде не пытайтесь сравнивать строки, используя '=='. Вместо этого используйте метод "equals". '==' сравнивает только ссылки на строки, а equals семантически сравнивает две строки.
Ответ 4
Вам не нужно бросать я в Emp, это уже Emp:
public int compareTo(Emp i) {
return getName().compareTo(i.getName());
}
Ответ 5
Не должны
if (this.getName() == ((Emp ) i).getName())
be
if (this.getName().equals(i.getName()))