Les Collections de tri personnalisé comparateur ne fonctionne pas
J'ai créé une coutume Comparateur de trier une liste de tableaux de Chaînes de caractères. J'ai couru à travers le débogueur et regardé les comparant et en les retournant des valeurs correctes. Cependant, mon tableau n'est pas trié. Depuis, je suis nouveau sur Java & Android, il y a peut être quelque chose d'autre se passe.
Après l'avoir regardé pendant quelques heures, je ne peux pas comprendre ce que .. et depuis que j'utilise ce site pour répondre à tant d'autres questions, je savais où venir !
Collections.sort(allWords, new Comparator<String>(){
public int compare(String o1, String o2) {
scoreWord sc1 = new scoreWord((String)o1);
scoreWord sc2 = new scoreWord((String)o2);
int i1 = sc1.getScore();
int i2 = sc2.getScore();
if ( i1 > i2 )
return 1;
return 0;
}
public boolean equals(String o1, String o2) {
scoreWord sc1 = new scoreWord((String)o1);
scoreWord sc2 = new scoreWord((String)o2);
int i1 = sc1.getScore();
int i2 = sc2.getScore();
if ( i1 == i2 )
return true;
return false;
}
});
Pour quelle raison avez-vous besoin de la
essayez
equals(String o1, String o2)
méthode?essayez
compare(Object o1, Object o2)
et equals(Object o1, Object o2)
OriginalL'auteur Richard | 2011-08-06
Vous devez vous connecter pour publier un commentaire.
Votre
compare
méthode n'est pas symétrique - il toujours renvoie 1 ou 0.Au lieu de cela, juste délégué à
Integer.compare
(si elle est disponible dans la version de Java que vous utilisez), en passant dans les scores:Sinon le faire à la main, ce qui est franchement une douleur si vous avez besoin de cela en plus d'un endroit, je vous propose de rédiger votre propre mise en œuvre de
Integer.compare
pour éviter la répétition:De cette façon, vous aurez approprié de symétrie:
a.compareTo(b) < 0
impliqueb.compareTo(a) > 0
a.compareTo(b) > 0
impliqueb.compareTo(a) < 0
a.compareTo(b) == 0
impliqueb.compareTo(a) == 0
C'est dans la documentation de
Comparator.compare
(Il est exprimé en termes de signe, mais c'est la même chose).OriginalL'auteur Jon Skeet
Essayez ceci:
pls me donner un indice, ce que vous entendez par "T/F"?
T/F - Vrai/Faux
OriginalL'auteur home
Votre comparateur doit retourner quelque chose qui ressemble à:
Retour:
un entier négatif, zéro ou un entier positif comme le premier argument est inférieur, égal ou plus grand que le second.
Source
OriginalL'auteur Austin Hanson