/ / Tri d'un ensemble de numéros de chaîne en java - java, tri, collections, set

Tri des numéros de chaîne en java - java, tri, collections, set

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 № 1

Ecrivez 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 Strings en Integers 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.compareTosinon, les trier par ordre, donc 1 2 3 sera automatiquement avant le 11 22 etc