Ordenar una colección (List,Set,etc) es una tarea de programación recurrente, supongamos que tenemos un inventario de playeras polo y queremos ordenarlos según su tamaño, o quizás quiere después ordenarlas por color. ¿Suena común?. Ordenar una lista en Java es sin duda uno de los trabajos mas comunes en el día a día del desarrollo de software.

Como les comente en ¿Porqué Java esta Cambiando? es normal que nuestra curva de uso en las expresiones Lambda sea no tan elevado es por eso que en estos manuales trataré de hacer mas uso de ellos.

Después de Java 8 todas las List vienen con un método de ordenamiento. La forma de ordenar puede ser parametrizable utilizando un objeto comparador(java.util.Comparator) que tiene una interfaz mas o menos así:

@FunctionalInterface
public interface Comparator<T> {
    public int compare(T o1, T o2);
}

Como vemos, podemos crear diferentes comportamientos para el método de ordenamiento, creando una implementación a medida del comparador. Por ejemplo para ordenarlo por el color podría ser de la siguiente manera:

		PlayeraPoloService.getAlmacen().sort(new Comparator<PlayeraPolo>() { public int compare(PlayeraPolo a1, PlayeraPolo a2){
			return a1.getColor().compareTo(a2.getColor()); }
		});

Usando una expresión Lambda

PlayeraPoloService.getAlmacen().sort(
				(PlayeraPolo p1, PlayeraPolo p2)-> 
					 p1.getSize() - p2.getSize()
		);

Como pueden ver es fácil de Usar a continuación le dejare las clases de este ejemplo, no sin antes pedirles que no dejen de visitar esta pagina y seguirme en mis redes sociales @abrahamstalin. Si este post te sirvió para Ordenar una lista en Java te recomiendo que me ayudes a compartirlo en tus grupos de whatsapp y facebook.

import java.util.Comparator;

import programacion.java.basico.ordenar.dto.PlayeraPolo;

public class OrdenarMain {

	public static void main(String[] args) {
		PlayeraPoloService.getAlmacen().sort(new Comparator<PlayeraPolo>() { public int compare(PlayeraPolo a1, PlayeraPolo a2){
			return a1.getColor().compareTo(a2.getColor()); }
		});
		
		PlayeraPoloService.getAlmacen().sort(
				(PlayeraPolo p1, PlayeraPolo p2)-> 
					 p1.getSize() - p2.getSize()
		);
		
		PlayeraPoloService.getAlmacen().sort(
				(PlayeraPolo p1, PlayeraPolo p2)-> 
					 p1.getColor().compareTo(p2.getColor())
		);
		PlayeraPoloService.getAlmacen().forEach((p)->System.out.println(p));
	}

}

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import programacion.java.basico.ordenar.dto.PlayeraPolo;

public class PlayeraPoloService {
	private static String[] colores = {"rojo","verde","azul","amarillo","negro","blanco"};
	private static int[] tamanios = {1,2,3,4};
	
	private static List<PlayeraPolo> playeras = null;
	
	public static List<PlayeraPolo> getAlmacen(){
		if (playeras == null) {
			playeras = new ArrayList<PlayeraPolo>();
			for (int x=1;x<=30;x++) {
				PlayeraPolo p = new PlayeraPolo();
				p.setSize(tamanios[new Random().nextInt(tamanios.length)]);
				p.setColor(colores[new Random().nextInt(colores.length)]);
				playeras.add(p);
			}
			
		}
		return playeras;
	}

}

public class PlayeraPolo {

	private int size;
	private String color;

	public int getSize() {
		return size;
	}

	public void setSize(int size) {
		this.size = size;
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	@Override
	public String toString() {
		return "PlayeraPolo [size=" + size + ", color=" + color + "]";
	}

}
Última modificación: 13 noviembre, 2019

Autor