<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://dosideas.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Ejemplo_con_Google_Guava_Comparator</id>
		<title>Ejemplo con Google Guava Comparator - Historial de revisiones</title>
		<link rel="self" type="application/atom+xml" href="https://dosideas.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Ejemplo_con_Google_Guava_Comparator"/>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Ejemplo_con_Google_Guava_Comparator&amp;action=history"/>
		<updated>2026-04-27T18:22:20Z</updated>
		<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
		<generator>MediaWiki 1.28.2</generator>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Ejemplo_con_Google_Guava_Comparator&amp;diff=6613&amp;oldid=prev</id>
		<title>Uva: Página creada con '=Objetivo=  * Encontrar una manera de organizar listas de una determinada entidad, por un conjunto de campos específico, de manera de poder tener múltiples criterios de ordena…'</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Ejemplo_con_Google_Guava_Comparator&amp;diff=6613&amp;oldid=prev"/>
				<updated>2012-05-23T14:25:01Z</updated>
		
		<summary type="html">&lt;p&gt;Página creada con &amp;#039;=Objetivo=  * Encontrar una manera de organizar listas de una determinada entidad, por un conjunto de campos específico, de manera de poder tener múltiples criterios de ordena…&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Objetivo=&lt;br /&gt;
&lt;br /&gt;
* Encontrar una manera de organizar listas de una determinada entidad, por un conjunto de campos específico, de manera de poder tener múltiples criterios de ordenamiento sobre la misma clase.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Situación ejemplo=&lt;br /&gt;
&lt;br /&gt;
* Tenemos una clase Tarea&lt;br /&gt;
* Tarea está asociada a un Usuario&lt;br /&gt;
* Tarea tiene una fecha.&lt;br /&gt;
* Usuario tiene dos String que representan  el nombre y apellido respectivamente.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EjemploGuavaComparacionListas.gif]]&lt;br /&gt;
&lt;br /&gt;
* Tenemos que ordenar una '''List&amp;lt;Tarea&amp;gt;''' , por apellido y nombre del usuario relacionado, y fecha de la tarea.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SIN Guava==&lt;br /&gt;
&lt;br /&gt;
* Deberíamos crear una clase '''TareaComparator''' que implemente '''Comparator&amp;lt;Tarea&amp;gt;''', &lt;br /&gt;
poniendo en el siguiente método:&lt;br /&gt;
  &lt;br /&gt;
    @Override&lt;br /&gt;
    public int compare(Tarea t1, Tarea t2) {&lt;br /&gt;
 		//código armando el criterio de ordenamiento de cada tarea&lt;br /&gt;
                //aca se deberia armar/concatenar todos los criterios en uno solo, obteniendo tareaCriterio1 y tareaCriterio2&lt;br /&gt;
 		return tareaCriterio1.compareTo(tareaCriterio2);&lt;br /&gt;
     }&lt;br /&gt;
	&lt;br /&gt;
* Luego en nuestro código de negocio, al momento de ordenar deberíamos invocar a Collections.sort(lista, tareaComparator)&lt;br /&gt;
&lt;br /&gt;
* De dicha manera, si quisiéramos tener otro criterio de ordenamiento, deberíamos tener una clase por cada criterio distinto de ordenamiento.&lt;br /&gt;
&lt;br /&gt;
==CON librerías de [[http://code.google.com/p/guava-libraries/| Guava ]] ==&lt;br /&gt;
&lt;br /&gt;
* Crear la clase '''TareaComparator''', sin implementar ninguna interfaz.&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Constructor privado.&lt;br /&gt;
     */&lt;br /&gt;
    private TareaComparator() {&lt;br /&gt;
     }&lt;br /&gt;
     /**&lt;br /&gt;
      * Ordena tarea por nombre de usuario.&lt;br /&gt;
      */&lt;br /&gt;
     private static Comparator&amp;lt;Tarea&amp;gt; byNombre = new Comparator&amp;lt;Tarea&amp;gt;() { &lt;br /&gt;
         @Override&lt;br /&gt;
         public int compare(final Tarea p1, final Tarea p2) {&lt;br /&gt;
             return p1.getUsuario().getNombre().compareTo(p2.getUsuario().getNombre());&lt;br /&gt;
         }&lt;br /&gt;
     };&lt;br /&gt;
     /**&lt;br /&gt;
     * Ordena tarea por apellido de usuario.&lt;br /&gt;
     */&lt;br /&gt;
     private static Comparator&amp;lt;Tarea&amp;gt; byApellido = new Comparator&amp;lt;Tarea&amp;gt;() { &lt;br /&gt;
         @Override&lt;br /&gt;
         public int compare(final Tarea p1, final Tarea p2) {&lt;br /&gt;
             return p1.getUsuario().getApellido().compareTo(p2.getUsuario().getApellido());&lt;br /&gt;
         }&lt;br /&gt;
     }; &lt;br /&gt;
      /**&lt;br /&gt;
      * Ordena tarea por fecha.&lt;br /&gt;
      */&lt;br /&gt;
      private static Comparator&amp;lt;Tarea&amp;gt; byFecha = new Comparator&amp;lt;Tarea&amp;gt;() {&lt;br /&gt;
          @Override&lt;br /&gt;
          public int compare(final Tarea p1, final Tarea p2) {&lt;br /&gt;
              return p1.getFecha().compareTo(p2.getFecha());&lt;br /&gt;
          }&lt;br /&gt;
      };&lt;br /&gt;
      /**&lt;br /&gt;
      * @return byNombre&lt;br /&gt;
      */&lt;br /&gt;
      public static Comparator&amp;lt;Tarea&amp;gt; getByNombre() {&lt;br /&gt;
         return byNombre;&lt;br /&gt;
     }&lt;br /&gt;
     /**&lt;br /&gt;
      * @return byApellido&lt;br /&gt;
      */&lt;br /&gt;
     public static Comparator&amp;lt;Tarea&amp;gt; getByApellido() {&lt;br /&gt;
        return byApellido;&lt;br /&gt;
     }&lt;br /&gt;
     /**&lt;br /&gt;
      * @return byFecha&lt;br /&gt;
      */&lt;br /&gt;
     public static Comparator&amp;lt;Tarea&amp;gt; getByFecha() {&lt;br /&gt;
         return byFecha;&lt;br /&gt;
     }&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
* Luego en nuestro código de negocio, al momento de ordenar deberíamos usar:&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
 	List&amp;lt;Tarea&amp;gt; tareasOrdenadas = Ordering.from(TareaComparator.getByApellido())&lt;br /&gt;
 					.compound(TareaComparator.getByNombre())&lt;br /&gt;
 					.compound(TareaComparator.getByFecha())&lt;br /&gt;
 					.sortedCopy(tareasDesordenadas);&lt;br /&gt;
	&lt;br /&gt;
* De esta manera, podemos anidar criterios de ordenamiento, combinándolos de las maneras que necesitemos, teniendo las comparaciones agrupadas en una sola clase.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Uva</name></author>	</entry>

	</feed>