Le tri des ints en java renvoie d'abord des nombres négatifs?
J'ai un comparateur comme ceci:
Collections.sort( sortedPlayers, new Comparator<RoundPlayer>()
{
public int compare(RoundPlayer p1, RoundPlayer p2)
{
return p1.getScore() - p2.getScore();
}
});
Tried players est une liste d'objets joueurs, les scores qu'ils renvoient sont des ints tels que, 200, -300, 1000 etc.
Le but du comparateur est de les trier afin qu'ils soient par ordre décroissant, 1000, 200, -300.
Cependant, ce comparateur semble renvoyer des résultats erratiques. Souvent avec des nombres négatifs qui sortent en premier.
2 answers
Inversez simplement votre valeur de retour que vous avez actuellement
Exemple de
return p2.getScore() - p1.getScore(); //will sort in descending order
Si vous souhaitez trier par ordre décroissant, envisagez d'envelopper vos collections Comparator
en utilisant .Ordre inverse (cmp de comparaison) .
Notez également que soustraire les deux valeurs est une mauvaise idée à cause du débordement d'entiers. Votre logique compare
est p1.getScore() - p2.getScore()
. Considérer
p1.score = 2147483647, p2.score = -2147483648, votre comparateur renverrait -1, indiquant incorrectement que le score de p1 est inférieur au score de p2.
La logique correcte consiste à tester pour, en renvoyant -1, 0 et 1. Mieux encore, Integer
implémente déjà cette logique afin que vous puissiez simplement déléguer à sa méthode compareTo
.
return Integer.valueOf(p1.getScore()).compareTo(Integer.valueOf(p2.getScore());