some image

Codes and Tags

Ejemplo Comparator Java ordenando un ArrayList por atributo

Etiquetas: Blog, Programación No comments

Hola,

Este ejemplo muestra la forma de realizar el ordenamiento de un ArrayList el cual contiene una colección de objetos, y deben ser ordenados por un atributo especifico de la clase. Para mayor comodidad se decidió utilizar un ejemplo convencional donde se tiene una colección (Collection) de estudiantes y se realizará un ordenamiento por Nombre o Apellido.

Este código también muestra la implementación de la interface Comparator,  a través de la utilización de Inner Class, donde para cada atributo se realiza la propia implementación que permita comparar los valores a partir del método compareTo()

Código

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

/**
 * Clase de ejemplo que muestra como ordenar un objeto a partir de uno de sus
 * atributos utilizando la implementacion de la clase comparator
 *
 * @author codesandtags
 *
 */
public class EjemploComparator {

	private ArrayList mischinitos = new ArrayList();

	public static void main(String[] args) {

		EjemploComparator ejemplo = new EjemploComparator();
		ejemplo.addEstudiante("caremonda", "espinilla");
		ejemplo.addEstudiante("elagresivo", "roncador");
		ejemplo.addEstudiante("carebala", "teofilo");
		ejemplo.addEstudiante("visages", "nerosqui");

		// Mostrando elementos antes
		System.out.println("[ Antes del ordenamiento ]");
		ejemplo.mostrar();
		// Ordenando elementos por nombre
		ejemplo.ordenarAscendente("nombre", 1);
		ejemplo.ordenarAscendente("nombre", 2);
		// Ordenando elementos por apellido
		ejemplo.ordenarAscendente("apellido", 1);
		ejemplo.ordenarAscendente("apellido", 2);

	}

	/**
	 * Adiciona un estudiante a la coleccion
	 *
	 * @param nombre
	 * @param apellido
	 */
	public void addEstudiante(String nombre, String apellido) {
		mischinitos.add(new Estudiante(nombre, apellido));
	}

	/**
	 * Muestra los elementos contenidos en la coleccion
	 */
	public void mostrar() {
		for (Estudiante e : mischinitos) {
			System.out.println(e.nombre + " : " + e.apellido);
		}
	}

	/**
	 * Ordena los elementos de una Coleccion teniendo en cuenta los atributos de
	 * la clase que se encuentra en la coleccion.
	 *
	 * @param atributo
	 * @param orden
	 *            : 1 = ASCENDENTE, 2 = DESCENDENTE
	 *
	 */
	public void ordenarAscendente(String atributo, int orden) {
		if (atributo.equals("nombre")) {
			System.out.println("\n[ Ordenamiento por Nombre ]");
			if (orden == 1) {
				System.out.println("[ Ascendente ] ");
				Collections.sort(mischinitos, new compararNombre());

			} else {
				System.out.println("[ Descendente ] ");
				Collections.sort(mischinitos,
						Collections.reverseOrder(new compararNombre()));
			}

			// Se muestran los datos
			mostrar();
		} else if (atributo.equals("apellido")) {
			System.out.println("\n[ Ordenamiento por Apellido ]");

			if (orden == 1) {
				System.out.println("[ Ascendente ] ");
				Collections.sort(mischinitos, new compararApellido());

			} else {
				System.out.println("[ Descendente ] ");
				Collections.sort(mischinitos,
						Collections.reverseOrder(new compararApellido()));
			}

			// Se muestran los datos
			mostrar();
		}
	}

	/***
	 * Inner class : compararNombre Implementacion del Comparator, para el
	 * atributo Nombre
	 *
	 */
	public class compararNombre implements Comparator

Ejemplo de Salida

[ Antes del ordenamiento ]
caremonda : espinilla
elagresivo : roncador
carebala : teofilo
visages : nerosqui

[ Ordenamiento por Nombre ]
[ Ascendente ]
carebala : teofilo
caremonda : espinilla
elagresivo : roncador
visages : nerosqui

[ Ordenamiento por Nombre ]
[ Descendente ]
visages : nerosqui
elagresivo : roncador
caremonda : espinilla
carebala : teofilo

[ Ordenamiento por Apellido ]
[ Ascendente ]
caremonda : espinilla
visages : nerosqui
elagresivo : roncador
carebala : teofilo

[ Ordenamiento por Apellido ]
[ Descendente ]
carebala : teofilo
elagresivo : roncador
visages : nerosqui
caremonda : espinilla

About Edwin Torres

Related Posts

  • Logo Java
  • Logo Java
  • Logo Java
  • Logo Java

Add your comment