Social

miércoles, 11 de diciembre de 2013

Java: Ordenar un ArrayList

Para colocar los elementos de una lista en orden dentro de un ArrayList se puede utilizar la clase Collections. El siguiente código muestra el resultado de utilizar el método sort() de la clase Collections en un ArrayList:


import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
public class MainTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("-----Ordenado cadenas de texto-----");
List<String> nombres = new ArrayList<String>();
nombres.add("Paco Perez");
nombres.add("José Alvarado");
nombres.add("Pepe Argeta");
nombres.add("Ariel Anonitmo");
nombres.add("Ariel Maldnoado");
nombres.add("Zulma Estrada");
//Si el arraylist es de objetos primitivos como, String, Integer, etc.
//basta con llamar al metodo sort.
Collections.sort(nombres);
for(String nombre : nombres){
System.out.println(nombre);
}
List<Hijo> hijos = new ArrayList<Hijo>();
hijos.add(new Hijo("Paco", "Perez", 20, new Date(11000)));
hijos.add(new Hijo("Pepe", "Argeta", 23, new Date(9000)));
hijos.add(new Hijo("Zulma", "Estrada", 18, new Date(10000)));
System.out.println("-----Ordenado por Fecha-----");
Collections.sort(hijos, new Comparator<Hijo>(){
@Override
public int compare(Hijo o1, Hijo o2) {
return o1.getFechaRegistro().compareTo(o2.getFechaRegistro());
}
});
for(Hijo hijo : hijos){
System.out.println(hijo.getNombre());
}
System.out.println("-----Ordenado por Edad-----");
Collections.sort(hijos, new Comparator<Hijo>(){
@Override
public int compare(Hijo o1, Hijo o2) {
return o1.getEdad().compareTo(o2.getEdad());
}
});
for(Hijo hijo : hijos){
System.out.println(hijo.getNombre());
}
}
}
view raw Ordenar.java hosted with ❤ by GitHub


En la primera parte se puede observar que con objetos del tipo String al utilizar el método sort con un List nos permite ordenar alfabéticamente los elementos sin mucho problema.

Luego se observa la forma de ordenar por medio de atributos de un objeto. Primero se muestra ordenando el objeto Hijo por medio de fechas (que pueden ser de nacimiento, registro, etc.) y luego se ordena la lista por medio de la edad.

Aquí se puede observar la clase Hijo:

import java.util.Date;
public class Hijo {
private String nombre;
private String apellido;
private Integer edad;
private Date fechaRegistro;
private Hijo hijo;
public Hijo(String nombre, String apellido, Integer edad, Date fechaRegistro) {
this.nombre = nombre;
this.apellido = apellido;
this.edad = edad;
this.fechaRegistro = fechaRegistro;
}
public Hijo getHijo() {
return hijo;
}
public void setHijo(Hijo hijo) {
this.hijo = hijo;
}
public Integer getEdad() {
return edad;
}
public void setEdad(Integer edad) {
this.edad = edad;
}
public Hijo(String nombre, String apellido) {
this.nombre = nombre;
this.apellido = apellido;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellido() {
return apellido;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
public Date getFechaRegistro() {
return fechaRegistro;
}
public void setFechaRegistro(Date fechaRegistro) {
this.fechaRegistro = fechaRegistro;
}
}


De esta forma se facilita mucho ordenar objetos por medio de uno de sus atributos.