How to use the Comparable CompareTo on Strings in Java

旧时模样 提交于 2020-01-10 09:24:55

问题


I can use it to sort by emp id but I'm not sure if it is possible to compare strings. I get an error the operator is undefined for strings.

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:


What you need to use is the compareTo() method of Strings.

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

That should do what you want.

Usually when implementing the Comparable interface, you will just aggregate the results of using other Comparable members of the class.

Below is a pretty typical implementation of a compareTo() method:

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:


Pretty sure your code can just be written like this:

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



回答3:


Java String already implements Comparable. So you could simply write your method as

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

(ofcourse make sure you add proper validations such as null checks etc)

Also in your code, do not try to compare Strings using '=='. Use 'equals' method instead. '==' only compare string references while equals semantically compares two strings.




回答4:


You don't need to cast i to Emp, it's already an Emp:

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



回答5:


Shouldn't

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

be

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



来源:https://stackoverflow.com/questions/3748805/how-to-use-the-comparable-compareto-on-strings-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!