How to use the Comparable CompareTo on Strings in Java

后端 未结 5 1836
甜味超标
甜味超标 2020-12-29 22:33

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 compa         


        
相关标签:
5条回答
  • 2020-12-29 22:48

    Shouldn't

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

    be

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

    0 讨论(0)
  • 2020-12-29 22:54

    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.

    0 讨论(0)
  • 2020-12-29 22:56

    Pretty sure your code can just be written like this:

    public int compareTo(Emp other)
    {
        return this.getName().compareTo(other.getName());
    }
    
    0 讨论(0)
  • 2020-12-29 22:56

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

    public int compareTo(Emp i) {
        return getName().compareTo(i.getName());
    }
    
    0 讨论(0)
  • 2020-12-29 23:01

    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;
        }
    }
    
    0 讨论(0)
提交回复
热议问题