PR14 - Criterios de Comparación y Ordering

Anuncio
Práctica 14
Criterios de ordenación y Guava
Comparator, Comparable y Ordering
Fundamentos de Programación
Departamento de Lenguajes y Sistemas Informáticos
Versión 1.0.1
Índice



Criterio de orden natural: Comparable
Criterio de orden adicional: Comparator
Ordering
PR14: Criterios de Comparación y Ordering
Comparable



comparaTo establece un orden natural para los objetos.
Debe coincidir en criterio con el método equals.
Valor entero devuelto:



Negativo si this es menor que o
Cero si this es igual a o
Positivo si this es mayor que o
package java.lang;
public interface Comparable<T>{
int compareTo(T o);
}
PR14: Criterios de Comparación y Ordering
3
Comparable: propiedades

compareTo:



Simetría: si el resultado de comparar un objeto con otro es
cero, el resultado coincide a la inversa.
Transitividad: si el signo de comparar un objeto con otro
coincide con el signo de comparar el segundo con un tercero,
entonces también coincide con el signo de comparar el
primero con el tercero.
equals/compareTo:

Si dos objetos son iguales, el resultado de su comparación será
igual a cero, y viceversa
PR14: Criterios de Comparación y Ordering
4
Ejemplo
public interface Persona extends Comparable<Persona>, Copiable<Persona> {
public String getNombre();
public String getApellidos();
public Integer getEdad();
…}
public class PersonaImpl implements Persona {
public int compareTo(Persona p){
int res=this.getApellidos().compareTo(p.getApellidos());
if (res==0)
res=this.getNombre().compareTo(p.getNombre());
return res;
}}
...
Persona p1 = new PersonaImpl(“María”,“García”,20);
Persona p2 = new PersonaImpl(“María”,“Zamorano”,20);
if(p1.compareTo(p2)==0)
mostrar(p1 + " y " + p2 + " no son iguales");
...
PR14: Criterios de Comparación y Ordering
5
Comparator


compare establece órdenes alternativos para los
objetos.
Valor entero devuelto




Negativo si o1 es menor que o2
Cero si los objetos o1 y o2 son iguales
Positivo si o1 es mayor que o2
Es necesario implementar una nueva clase que implemente
Comparator<T>
package java.util;
public interface Comparator<T>{
int compare(T o1, T o2);
}
PR14: Criterios de Comparación y Ordering
6
Comparator: propiedades

Compare:



Simetría: si el resultado de comparar un objeto con otro es
cero, el resultado coincide a la inversa
Transitividad: si el signo de comparar un objeto con otro
coincide con el signo de comparar el segundo con un tercero,
entonces también coincide con el signo de comparar el
primero con el tercero
equals/compare:
 Si dos objetos son iguales, el resultado de su comparación será
igual a cero, y viceversa
PR14: Criterios de Comparación y Ordering
7
Ejemplo

Comparador de Persona por edad:
public class ComparadorPersonaEdad implements Comparator<Persona> {
}

public int compare(Persona o1, Persona o2){
return o1.getEdad().compareTo(o2.getEdad());
}
Ejemplo de uso:
...
Persona p1 = new PersonaImpl(1,2);
Persona p2 = new PersonaImpl(3,2);
Comparator< Persona > cmp = new
ComparadorPersonaEdad ();
if(cmp.compare(p1,p2)==0)
mostrar(p1 + " y " + p2 + " tienen la misma edad");
...
PR14: Criterios de Comparación y Ordering
Ordering
Clase de la librería Guava
 La librería se descarga de:
http://code.google.com/p/guava-libraries/

PR14: Criterios de Comparación y Ordering
Ordering

Importar la librería:
PR14: Criterios de Comparación y Ordering
Ordering

Importar la librería:
PR14: Criterios de Comparación y Ordering
Ordering

Importar la librería:
PR14: Criterios de Comparación y Ordering
Ordering

Importar la librería:
PR14: Criterios de Comparación y Ordering
Ordering


El constructor de la clase Ordering es protegido.
Construcción de objetos de tipo Ordering a partir de 3
métodos estáticos:

from
Comparator<Persona> c = new ComparadorPorEdad();
Ordering<Persona> ord1 = Ordering.from(c);

usingToString
Ordering<Persona> ord2 = Ordering.usingToString();

natural
Ordering<Persona> ord3 = Ordering.natural();
PR14: Criterios de Comparación y Ordering
Ordering

Métodos:









static <T> Ordering<T> from(Comparator<T> comparator)
Devuelve un ordering para un comparator existente.
static Ordering<Object> usingToString()
Devuelve un ordering que compara objetos según el orden alfabético de la representación en cadena
(toString) de los objetos del iterable.
static <C extends Comparable> Ordering<C> natural()
Devuelve un ordering en función del orden natural, es decir, del método compareTo.
<E extends T> List<E> sortedCopy(Iterable<E> iterable)
Devuelve una copia ordenada de un iterable dado. El orden del iterable depende del criterio de
comparación asociado al objeto ordering que invoque este método.
int binarySearch(List<? extends T> sortedList, T key)
Devuelve la posición del element key en el iterable ordenado sortedList utilizando el algoritmo de
búsqueda binaria.
<S extends T> Ordering<S> nullsFirst()
Devuelve un ordering que trata iterables con elementos null, de manera que éstos se consideran menores
al resto de objetos, si se ordena los elementos null quedarán al principio.
<S extends T> Ordering<S> nullsLast()
Similar al anterior, pero los elementos null quedarán al final del iterable si este es ordenado.
<E extends T> E max(Iterable<E> iterable)
Devuelve el máximo del iterable de acuerdo con el criterio de ordenación asociado al objeto ordering
que invoca este método.
<E extends T> E min(Iterable<E> iterable)
Devuelve el mínimo del iterable de acuerdo con el criterio de ordenación asociado al objeto ordering
que invoca este método.
PR14: Criterios de Comparación y Ordering
Descargar