How to use the Comparable CompareTo on Strings in Java

Jack picture Jack · Sep 20, 2010 · Viewed 81.7k times · Source

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;

Answer

jjnguy picture jjnguy · Sep 20, 2010

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 combine 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;
    }
}