Last active
February 21, 2017 23:01
-
-
Save javerosanonimos/f5b274f967b3f65457a30df862815646 to your computer and use it in GitHub Desktop.
Ejemplo para ordenar una lista utilizando comparator (ver Gist BeanParaOrdenar)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.ArrayList; | |
import java.util.Collections; | |
import java.util.Comparator; | |
import java.util.List; | |
/** | |
@Autor: www.javerosanonimos.com | |
Twitter: @javerosanonimos | |
Facebook: www.facebook.com/JaverosAnonimos | |
e-mail: javerosanonimos@gmail.com | |
**/ | |
public class OrdenarListaConComparator { | |
/** | |
* Implementamos nuestro comparator por código en este caso es estàtico para | |
* invocarlo con el nombre de la clase sin necesidad de crear un objeto | |
**/ | |
public static Comparator<BeanParaOrdenar> comparatorPorCodigo = new Comparator<BeanParaOrdenar>() { | |
@Override | |
public int compare(final BeanParaOrdenar valorUno, final BeanParaOrdenar valorDos) { | |
/** | |
* inicializamos en cero nuestro resultado del comparator (en caso de que exista | |
* un null nos devolvera cero) | |
**/ | |
int resultadoComparator = 0; | |
// Validamos que no halla nulos (evitar null pointer exception) | |
if (valorUno != null && valorUno.getCodigo() != null && valorDos != null && valorDos.getCodigo() != null) { | |
// Obtenemos los valores que queremos comparar | |
final String valorVariableUno = valorUno.getCodigo().toUpperCase(); | |
final String valorVariableDos = valorDos.getCodigo().toUpperCase(); | |
/** | |
* comparamos por la propiedad que necesitamos ordenar (en este | |
* caso por còdigo) esto nos regresa negativo cuando es un valor | |
* menor , positivo cuando es mayor y cero cuando son iguales | |
**/ | |
resultadoComparator = valorVariableUno.compareTo(valorVariableDos); | |
} | |
return resultadoComparator; | |
} | |
}; | |
/** | |
* Implementamos nuestro comparator por valor en este caso es estatico para | |
* invocarlo con el nombre de la clase sin necesidad de crear un objeto | |
**/ | |
public static Comparator<BeanParaOrdenar> comparatorPorValor = new Comparator<BeanParaOrdenar>() { | |
@Override | |
public int compare(final BeanParaOrdenar valorUno, final BeanParaOrdenar valorDos) { | |
/** | |
* inicializamos en cero nuestro resultado del comparator (en caso de que exista | |
* un null nos devolvera cero) | |
**/ | |
int resultadoComparator = 0; | |
// validamos para evitar null pointer | |
if (valorUno != null && valorUno.getValor() != null && valorDos != null && valorDos.getValor() != null) { | |
/** | |
* comparamos por la propiedad que necesitamos ordenar (en este | |
* caso por valor) esto nos regresa negativo cuando es un valor | |
* menor , positivo cuando es mayor y cero cuando son iguales | |
**/ | |
resultadoComparator = valorUno.getValor().compareTo(valorDos.getValor()); | |
} | |
return resultadoComparator; | |
} | |
}; | |
public static void main(final String arg[]) { | |
// Creamos la lista que usaremos para el ejemplo | |
final List<BeanParaOrdenar> listaTestComparator = generarLista(); | |
// Imprimimos los datos de la lista antes de ser ordenada | |
pintarValoresLista(listaTestComparator, "Lista sin ordenar"); | |
// Ordenamos la misma lista por còdigo utilizando Collections donde pasaremos como paràmetros nuestra lista | |
//mas el comparator (el que sobreescribimos para ordenar la lista), esto actualiza con el orden correspondiente | |
Collections.sort(listaTestComparator, OrdenarListaConComparator.comparatorPorCodigo); | |
// Se imprime la lista ordenada por còdigo | |
pintarValoresLista(listaTestComparator, "Lista ordenada por còdigo"); | |
// Ordenamos la misma lista por valor | |
Collections.sort(listaTestComparator, OrdenarListaConComparator.comparatorPorValor); | |
// Se imprime la lista ordenada por valor | |
pintarValoresLista(listaTestComparator, "Lista ordenada por valor"); | |
} | |
/** | |
* Mètodo que usaremos para imprimir los valores de la lista en consola para | |
* reutilizar nuestro còdigo | |
**/ | |
private static void pintarValoresLista(List<BeanParaOrdenar> listaTestComparator, String mensaje) { | |
for (final BeanParaOrdenar testFor : listaTestComparator) { | |
// Utilizamos StringBuilder para concatenar en lugar de "+" por | |
// cuestion de rendimiento al concatenar cadenas (StringBuilder es | |
// mas optimo que un +) | |
final StringBuilder mensajeConcatenado = new StringBuilder(); | |
mensajeConcatenado.append(mensaje); | |
mensajeConcatenado.append(" codigo= "); | |
mensajeConcatenado.append(testFor.getCodigo()); | |
mensajeConcatenado.append(" valor= "); | |
mensajeConcatenado.append(String.valueOf(testFor.getValor())); | |
System.out.println(mensajeConcatenado.toString()); | |
} | |
// Separador para ver en consola cada resultado | |
System.out.println("***********************************"); | |
} | |
private static List<BeanParaOrdenar> generarLista() { | |
// Se crea la lista | |
final List<BeanParaOrdenar> listaValoresTest = new ArrayList<BeanParaOrdenar>(); | |
// Se crea el objeto que agregaremos a la lista | |
BeanParaOrdenar testComparator = new BeanParaOrdenar(); | |
// llenamos el objeto | |
testComparator.setCodigo("A"); | |
testComparator.setValor(100); | |
// agregamos el objeto a la lista | |
listaValoresTest.add(testComparator); | |
testComparator = new BeanParaOrdenar(); | |
testComparator.setCodigo("C"); | |
testComparator.setValor(108); | |
listaValoresTest.add(testComparator); | |
testComparator = new BeanParaOrdenar(); | |
testComparator.setCodigo("Z"); | |
testComparator.setValor(60); | |
listaValoresTest.add(testComparator); | |
testComparator = new BeanParaOrdenar(); | |
testComparator.setCodigo("A"); | |
testComparator.setValor(100); | |
listaValoresTest.add(testComparator); | |
return listaValoresTest; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment