Ordenar un List<> ArrayList de objetos
Esta ocasión explicaré como ordenar una lista de tipo arraylist de objetos predeterminados.
Tengo mi clase del objeto Empleado.
Observese la linea donde aparece el compareTo(), este método me permitirá ordenar mi lista según el criterio especifico. (Primero por Edad luego por Nombre).
Observese String.valueOf(), este me permite cambiar el formato del valor, en primera instancia la Edad que de ser int pasa a String, luego el Nombre sigue siendo String.
Despues tengo la clase que trabaja la lista List<> sin orden especifico.
Ejecuto la secuencia y la consola arroja lo siguiente.
Hasta aquí la lista contiene los elementos en el orden en el que se fueron agregando a la lista, si queremos ordenarlos, hay que disparar el método Collections.sort() que lo va lograr basándose en @Override de la clase del Objeto de la lista.
Antes de imprimir la lista nuevamente, hay que ordenarlo...
Se ejecuta el @Override comparable() del objeto que ocupa los espacios de la lista.
Ahora la impresión es esta.
Espero les sirva.
- nomarlegnar's blog
- Inicie sesión o regístrese para enviar comentarios
No conviertas a String para
No conviertas a String para comparar, puedes comparar directamente por campos.
Con tu implementación si las edades son 1, 2 y 10 respectivamente la salida es:
Que parece más desordenado aún.
En el método compareTo compara por cada campo, primero por edad y si son iguales entonces por nombre.
Quería poner un ejemplo más sencillo, pero comparar por edad / nombre no es taaaaaan trivial como parece.
Esta sería la versión correcta de compareTo
Oh, claro...
Cuando la ordenación es únicamente por valores numéricos esto que comentas es lo mas correcto.
La representación de la ordenación que comentas que no es taaaan trivial pues efectivamente no lo es, pero cuando te topas con un tema de sucursales por entidad ahí entra lo que apliqué, lo que funcionó y lo que cumplo con compartir, tu comentario complementa perfectamente lo que quería explicar.
Eh visto a lo que te referías con lo del 1 y del 10 al cambiarlos a String efectivamente tiene ese efecto que comentas. Mas que ordenarlos los desordena.
:S
Me hubiera sido mas atinado manejar un ejemplo sobre apellido paterno, materno y nombre ahora que lo pienso...
Jeje, si, esa es la idea
Jeje, si, esa es la idea tener una comunidad, alguien escribe algo y alguien más opina o comenta al respecto y todo mundo se beneficia de ello.
Manita Arriba
Si, la comunidad es para eso! Yeah !
Como ejercicio me gusto pero.
Me gusto pues dejas muy claro el uso de los elementos, pero seria bueno que mencionaras TreeSet ( ), pues es una clase que resuelve sola el ordenamiento.
Saludos.
TreeSet
Pero consideren que TreeSet es un Set, por lo que no permite elementos duplicados, a diferencia de una lista, que sí los permite.
Por si acaso
No lo recuerdo muy bien pero había problemas cuando comparabas Strings con acentos o caracteres especiales desde alguna versión de java.
Se los comento para que no olviden este caso en sus pruebas.