Tengo un List<String>
objeto que contiene nombres de países. ¿Cómo puedo ordenar esta lista alfabéticamente?
java
list
sorting
collections
alphabetical
Lennie
fuente
fuente
Respuestas:
Suponiendo que se trata de cadenas, utilice el método estático conveniente
sort
...fuente
Solución con Collections.sort
Si se ve obligado a usar esa Lista, o si su programa tiene una estructura como
entonces la respuesta de Thilos será la mejor manera de hacerlo. Si lo combina con el consejo de Tom Hawtin - tackline , obtendrá:
Solución con un TreeSet
Si es libre de decidir, y si su aplicación puede volverse más compleja, puede cambiar su código para usar un TreeSet. Este tipo de colección clasifica sus entradas justo cuando se insertan. No es necesario llamar a sort ().
Nota al margen sobre por qué prefiero el TreeSet
Esto tiene algunas ventajas sutiles, pero importantes:
TreeSet<String> countyNames
y sabe al instante: esta es una colección ordenada de cadenas sin duplicados, y puedo estar seguro de que esto es cierto en todo momento . Tanta información en una breve declaración.Usar la colección correcta para la tarea correcta es una clave para escribir código corto y libre de errores. No es tan demostrativo en este caso, porque solo guarda una línea. Pero he dejado de contar la frecuencia con la que veo a alguien usando una Lista cuando quieren asegurarse de que no haya duplicados, y luego construir esa funcionalidad ellos mismos. O peor aún, usando dos listas cuando realmente necesita un mapa.
No me malinterpreten: el uso de Collections.sort no es un error o una falla. Pero hay muchos casos en que TreeSet es mucho más limpio.
fuente
Puede crear una nueva copia ordenada usando Java 8 Stream o Guava:
Otra opción es ordenar en el lugar a través de la API de colecciones:
fuente
¡Mejor tarde que nunca! Así es como podemos hacerlo (solo con fines de aprendizaje):
fuente
En una línea, usando Java 8:
fuente
Utilice los dos argumentos para de
Collections.sort
.Comparator
Querrá un adecuado que trate el caso apropiado (es decir, hace un pedido léxico, no UTF16), como el que se puede obtener a través dejava.text.Collator.getInstance
.fuente
A menos que esté clasificando cadenas solo en inglés sin acento, probablemente quiera usar a
Collator
. Clasificará correctamente los signos diacríticos, puede ignorar mayúsculas y minúsculas y otras cosas específicas del idioma:Puede establecer la fuerza del intercalador , ver el javadoc.
Aquí hay un ejemplo para el eslovaco donde
Š
debería ir despuésS
, pero en UTFŠ
está en algún lugar despuésZ
:fuente
Esto es lo que buscas
fuente
Al usar
Collections.sort()
, podemos ordenar una lista.salida:
fuente
alfabeto descendente:
fuente
Lo mismo en JAVA 8: -
fuente
fuente
Puedes intentar usar un método que hice.
String key
- será el orden que desee y en este caso en orden alfabético. Solo pon "abc ...".String list[]
- la lista que desea ordenar con la tecla.int index
- Establecer como 0, establecerá el desplazamiento de la clave.fuente