Skip to content

Instantly share code, notes, and snippets.

@javerosanonimos
Last active February 21, 2017 23:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save javerosanonimos/f5b274f967b3f65457a30df862815646 to your computer and use it in GitHub Desktop.
Save javerosanonimos/f5b274f967b3f65457a30df862815646 to your computer and use it in GitHub Desktop.
Ejemplo para ordenar una lista utilizando comparator (ver Gist BeanParaOrdenar)
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