Je dois trier un ensemble de chaînes qui contient un nombre.Ex: [15, 13, 14, 11, 12, 3, 2, 1, 10, 7, 6, 5, 4, 9, 8]
. J'ai besoin de le trier [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
. Mais quand j'utilise Collections.sort(keyList);
où keyList est défini, le résultat obtenu est [1, 10, 11, 12, 13, 14, 15, 2, 3, 4, 5, 6, 7, 8, 9]
. S'il vous plaît aider.
Réponses:
2 pour la réponse № 1Ecrivez un comparateur personnalisé et analysez-le comme argument Collections.sort(Collection,Comparator)
. Une solution consiste à analyser vos chaînes en entiers.
Collections.sort(keyList, new Comparator<String>()
{
@Override
public int compare(String s1, String s2)
{
Integer val1 = Integer.parseInt(s1);
Integer val2 = Integer.parseInt(s2);
return val1.compareTo(val2);
}
});
0 pour la réponse № 2
pouvez-vous essayer avec:
final int[] searchList =
new int[] { 15, 13, 14, 11, 12, 3, 2, 1, 10, 7, 6, 5, 4, 9, 8 };
Arrays.sort(searchList);
Le résultat est:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
La liste doit être int
0 pour la réponse № 3
Vos chaînes seront triées en tant que chaînes dans ordre naturelet non comme des nombres. Alors, "11"
vient après "10"
et "2"
viendra après "11111111110"
.
Que faire?.
Utilisation Integer.parseInt()
pour analyser chaque valeur de chaîne de l'ensemble en tant qu'entier, puis les ajouter à un ensemble et appeler Collections.sort()
.
0 pour la réponse № 4
Transformer le String
s en Integer
s premier.
List<Integer> ints = new ArrayList<>();
for (String s : strings)
ints.add(Integer.parseInt(s));
Collections.sort(ints);
Si vous n’avez pas besoin de valeurs en double, vous pouvez utiliser un SortedSet
, qui maintient automatiquement la commande:
SortedSet<Integer> ints = new TreeSet<>();
for (String s : strings)
ints.add(Integer.parseInt(s));
// all done!
0 pour la réponse № 5
vous pouvez faire ce que dit Kai, et convertir votre chaîne en entier et la comparer
mais c’est une opération coûteuse, voici ce que je suggère:
keyList.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1.length() == o2.length()){
return o1.compareTo(o2);
}
return o1.length() - o2.length();
}
});
si vos nombres ont la même longueur, comparez-les en utilisant String.compareTo
sinon, les trier par ordre, donc 1 2 3 sera automatiquement avant le 11 22 etc