/ / Ordenar conjunto de números de cadena en java - java, ordenar, colecciones, establecer

Clasificación de un conjunto de números de cuerda en java - java, clasificación, colecciones, conjunto

Necesito ordenar un conjunto de cadenas que contenga un número.Ex: [15, 13, 14, 11, 12, 3, 2, 1, 10, 7, 6, 5, 4, 9, 8]. Necesito ordenarlo [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]. Pero cuando uso Collections.sort(keyList); donde se establece KeyList, el resultado obtenido es [1, 10, 11, 12, 13, 14, 15, 2, 3, 4, 5, 6, 7, 8, 9]. Por favor ayuda.

Respuestas

2 para la respuesta № 1

Escribe un comparador personalizado y analízalo como argumento para Collections.sort(Collection,Comparator). Una solución es analizar sus cadenas a enteros.

    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 para la respuesta № 2

puedes probar con:

final int[] searchList =
new int[] { 15, 13, 14, 11, 12, 3, 2, 1, 10, 7, 6, 5, 4, 9, 8 };
Arrays.sort(searchList);

El resultado es:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

La lista necesita ser int


0 para la respuesta № 3

Sus cadenas se ordenarán como cadenas en orden natural, y no como numeros. Asi que, "11" viene después "10" y "2" vendrá después "11111111110".

¿Qué hacer?.

Utilizar Integer.parseInt() para analizar cada valor de cadena en el conjunto como entero, luego agréguelos a un conjunto y llame Collections.sort().


0 para la respuesta № 4

Transformar el Strings en Integers primero

List<Integer> ints = new ArrayList<>();
for (String s : strings)
ints.add(Integer.parseInt(s));
Collections.sort(ints);

Si no necesita valores duplicados, puede utilizar un SortedSet, que mantiene el pedido automáticamente:

SortedSet<Integer> ints = new TreeSet<>();
for (String s : strings)
ints.add(Integer.parseInt(s));
// all done!

0 para la respuesta № 5

podrías hacer lo que dijo Kai, convertir tu cadena en entero y compararla

Pero es una operación costosa, lo que sugiero es esto:

 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 tus números tienen la misma longitud, entonces compáralos usando String.compareToDe lo contrario, ordénelos por orden, de modo que 1 2 3 será automáticamente antes de 11 22, etc.