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;
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;
}
}
Je suis sûr que votre code peut simplement être écrit comme ceci:
public int compareTo(Emp other)
{
return this.getName().compareTo(other.getName());
}
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.
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());
}
Ne devrait pas
if (this.getName() == ((Emp ) i).getName())
être
if (this.getName().equals(i.getName()))