Anuncios

Bienvenidos sean a este post, cuando vimos a colecciones framework hablamos de Comparator y dijimos que tanto TreeSet como MapSet almacenan los datos de forma ordenada pero el encargado de darle un significado a esto es Comparator y esta lo hace por medio de dos metodos: compare y equals, hablemos sobre el primer metodo compare.

Anuncios

El metodo compare() trabaja de la siguiente forma:

int compare(Objeto obj1, Objeto obj2);
Anuncios

En este caso obj1 y obj2 son los objetos a ser comparados, en caso de ser iguales ambos objetos nos retornara un cero, en caso de que obj1 sea mayor a obj2 devolvera un valor positivo y en caso contrario devolvera un valor negativo, si sobreescribieramos o redefinieramos el metodo compare podriamos cambiar la forma que se ordenan los objetos, por ejemplo para ordenar a la inversa deberemos crear un comparador que invierta la salida de la comparacion, pasemos a hablar sobre el metodo equals, el metodo equals tiene la siguiente sintaxis:

boolean equals(Objeto o)
Anuncios

En este caso haremos al metodo equals que compare al objeto instanciador con el objeto informado, en caso de que ambos sean iguales devolvera un verdadero y utiliza el mismo orden, en caso contrario devolvera un falso, sobreescribir o redefinir equals en este caso es innecesario y no se puede simplificar mas al comparador.

Anuncios

A continuacion veremos un ejemplo para poner en practica ambos metodos:

Ejemplo.java:

import java.util.*;

class Perro implements Comparator<Perro>, Comparable<Perro>
{
        private String nombre;
        private int edad;
        Perro() {}

        Perro(String n, int e)
        {
                nombre = n;
                edad = e;
        }

        public String getPerroNombre()
        {
                return nombre;
        }

        public int getPerroEdad()
        {
                return edad;
        }

        public int compareTo(Perro p)
        {
                return (this.nombre).compareTo(p.nombre);
        }

        public int compare(Perro p, Perro p1)
        {
                return p.edad - p1.edad;
        }
}

public class Ejemplo
{
        public static void main(String[] args)
        {
                List<Perro> lista = new ArrayList<Perro>();

                lista.add(new Perro("Arturo",5));
                lista.add(new Perro("Lola",2));
                lista.add(new Perro("Violeta",9));
                lista.add(new Perro("Frida",9));
                lista.add(new Perro("Helga",7));
                Collections.sort(lista);

                for(Perro e: lista)
                        System.out.print(e.getPerroNombre() + ", ");

                Collections.sort(lista, new Perro());
                System.out.println(" ");

                for(Perro e: lista)
                        System.out.print(e.getPerroNombre() + " : "
                                        + e.getPerroEdad() + ", ");

                System.out.println();
        }
}
Anuncios

En este ejemplo primero crearemos una clase llamada Perro, la cual implementara a Comparator y Comparable en esta clase, para esta clase estableceremos dos variables llamadas nombre y edad para almacenar los datos indicados en la misma, definiremos un constructor predeterminado y otro constructor para asignarles un valor a nombre y edad, despues tendremos dos metodos uno llamado getPerroNombre que nos devolvera el valor de nombre y otro llamado getEdadPerro que se encargara de devolvernos el valor de edad, luego sobreescribiremos a compareTo para que utilice a la clase Perro, en este caso devolvera la comparacion entre el nombre asignado a la clase Perro con el objeto infomado, luego sobreescribiremos el metodo compare donde recibira los dos objetos y devolvera la resta entre la edad de cada uno de los objetos informados. Ahora pasaremos a nuestra clase en si, en el cuerpo de main primero crearemos un objeto de la clase List del tipo Perro llamada lista esto como referencia pero el objeto en si sera un ArrayList tambien del tipo Perro, despues agregaremos cinco perros, pueden utilizar otros o los del ejemplo pero basicamente son el nombre del perro y la edad del mismo, despues por medio de esta linea:

Collections.sort(lista);
Anuncios

Esta se encargara de ordenarla por nombre, despues utilizamos un for mejorado mostraremos cada uno de los nombres de los perros ingresados en la lista, luego tendremos la siguiente linea:

Collections.sort(lista, new Perro());
Anuncios

Esta se encargara de ordenar la lista en lugar de por nombre esta vez por edad, gracias al objeto que informamos despues que utilizaremos como comparador, en este caso volveremos a utilizar un for mejorado donde en este caso utilizaremos los metodos de la clase Perro para mostrar los nombres y la edad de cada uno de los perros almacenados en lista pero a su vez esta vez estara ordenado por la edad, si lo compilamos y probamos obtendremos la siguiente salida:

tinchicus@dbn001vrt:~/programacion/java/codigo$ java Ejemplo
Arturo, Frida, Helga, Lola, Violeta,
Lola : 2, Arturo : 5, Helga : 7, Frida : 9, Violeta : 9,
tinchicus@dbn001vrt:~/programacion/java/codigo$
Anuncios

Como pueden ver la primera linea nos muestra los nombres de los perros y a su vez en orden alfabetico, la segunda linea podemos ver el nombre con la edad que informamos y en este caso podemos ver como se ordeno pero en este caso por la edad.

Anuncios

En resumen, hoy hemos visto como trabaja Comparator, cuales son sus dos metodos mas utilizados, como se implementan, vimos un ejemplo donde pudimos ordenarlo y como sobreescribiendo los metodos compare() y compareTo() pudimos ordenar los datos de una lista, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00