Подтвердить что ты не робот

Как использовать 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;
4b9b3361

Ответ 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()))