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 № 1Escribe 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 String
s en Integer
s 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.compareTo
De lo contrario, ordénelos por orden, de modo que 1 2 3 será automáticamente antes de 11 22, etc.