miércoles, 17 de febrero de 2010

Ordenar elementos de List en java con Collections.sort

Hola:

Todos alguna vez nos topados con ordenar elementos de una List de java (java.util.List) yo se que muchos van a decir que se podria hacer con la base de datos agregando un order by campo_de_tbl, pero muchas aplicaciones no lo requieren y para lograr esto ocuparemos java.util.Comparator.

Paso 1. Crear un bean, para fines prácticos todos los atributos serán String :

public class Concepto {

private String id;
private String cve;
private String descripcion;
private String valor;


public String getValor() {
return valor;
}
public void setValor(String valor) {
this.valor = valor;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCve() {
return cve;
}
public void setCve(String cve) {
this.cve = cve;
}
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}



}

Supongamos que queremos ordenas nuestros datos de nuestra List atravez del atributo cve.

Paso 2. Crear la clase que ConceptoComparator que implementa la interfaz Comparator

import java.util.Comparator;


public class ConceptoComparator implements Comparator{

public int compare(Object arg0, Object arg1) {
Concepto conA = (Concepto) arg0;
Concepto conB=(Concepto)arg1;

Long cveConA = Long.parseLong(conA.getCve());
Long cveConB = Long.parseLong(conB.getCve());

if(cveConA < cveConB)
return -1;

else
if (cveConA > cveConB)
return 1;


return 0;
// TODO Auto-generated method stub

}

}

java.util.Comparator int compare(T a, T b) compara dos objetos y proporciona un valor negativo si a va antes que b, cero si se consideran idénticos en el orden de clasificación, y un valor positivo si a va después de b.

Paso 3 : llamar al metodo Collections.sort(...)

List conceptos = new ArrayList();

Concepto con1 = new Concepto();
con1.setCve("10017");

Concepto con2 = new Concepto();
con2.setCve("20001");

Concepto con3 = new Concepto();
con3.setCve("10001");

conceptos.add(con1);
conceptos.add(con2);
conceptos.add(con3);
System.out.println("sin ordenar ");

for(Concepto con : conceptos){
System.out.println(" "+con.getCve());
}

Collections.sort(conceptos, new ConceptoComparator());

System.out.println("ordenados ");
for(Concepto con : conceptos){
System.out.println(" "+con.getCve());
}


el resultado sera algo como esto:
sin ordenar
10017
20001
10001
ordenados
10001
10017
20001

No hay comentarios.: