web-dev-qa-db-fra.com

Comment utiliser ComparTo CompareTo sur des chaînes dans Java

Je peux l'utiliser pour trier par emp id mais je ne sais pas s'il est possible de comparer des chaînes. J'obtiens une erreur: l'opérateur n'est pas défini pour les chaînes.

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;
22
Jack

Ce que vous devez utiliser est la méthode compareTo() des chaînes.

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

Cela devrait faire ce que vous voulez.

Généralement, lors de l'implémentation de l'interface Comparable, vous agrégerez simplement les résultats de l'utilisation d'autres membres Comparable de la classe.

Voici une implémentation assez typique d'une méthode 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;
    }
}
46
jjnguy

Je suis sûr que votre code peut simplement être écrit comme ceci:

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

Java String implémente déjà Comparable. Vous pouvez donc simplement écrire votre méthode

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

(bien sûr, assurez-vous d'ajouter des validations appropriées telles que des contrôles nuls, etc.)

Également dans votre code, n'essayez pas de comparer des chaînes en utilisant '=='. Utilisez plutôt la méthode "égal". '==' compare uniquement les références de chaîne tandis que égal compare sémantiquement deux chaînes.

5
Gopi

Vous n'avez pas besoin de lancer i sur Emp, c'est déjà un Emp:

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

Ne devrait pas

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

être

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

1
zengr