2010-11-30 21 views

Respuesta

20

Implemente un personalizado Comparator, luego use Collections.sort(List, Comparator). Probablemente se verá algo como esto:

public class FooComparator implements Comparator<Foo> { 
    public int compare(Foo a, Foo b) { 
     int dateComparison = a.date.compareTo(b.date); 
     return dateComparison == 0 ? a.value.compareTo(b.value) : dateComparison; 
    } 
} 

Collections.sort(foos, new FooComparator()); 
+2

asumiendo 'valor' es una clase que implementa' Comparable' ... – harto

0

Si la clase del objeto implementa Comparable, entonces todo lo que necesita hacer es codificar correctamente el método compareTo comparar primera fecha, y luego, si las fechas son iguales, comparar los valores , y luego devuelve el resultado int apropiado en base a los resultados.

+0

o se puede hacer esto con un comparador como se indicó anteriormente si no desea que la clase implemente Comparable ... su elección. Si usa un Comparador, entonces el método de comparación utilizará mi sugerencia anterior. –

1

Si desea código de ejemplo que parece, puede utilizar lo siguiente:

Collections.sort(foos, new Comparator<Foo>{ 
    public int compare(Foo a, Foo b) { 
     int dateComparison = a.date.compareTo(b.date); 
     return dateComparison == 0 ? a.value.compareTo(b.value) : dateComparison; 
    } 
}); 
3
public static <T> void sort(List<T> list, final List<Comparator<T>> comparatorList) { 
     if (comparatorList.isEmpty()) {//Always equals, if no Comparator. 
      throw new IllegalArgumentException("comparatorList is empty."); 
     } 
     Comparator<T> comparator = new Comparator<T>() { 
     public int compare(T o1, T o2) { 
       for (Comparator<T> c:comparatorList) { 
        if (c.compare(o1, o2) > 0) { 
        return 1; 
        } else if (c.compare(o1, o2) < 0) { 
        return -1; 
        } 
       } 
       return 0; 
     } 
     }; 
     Collections.sort(list, comparator); 
    } 
+0

Considere usar una llamada a la biblioteca para fusionar los comparadores en lugar de implementar los suyos aquí; consulte la clase 'Pedidos 'de Guava: http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/collect /Ordering.html –

Cuestiones relacionadas