Tengo una ArrayList de objeto. El objeto contiene los atributos date
y value
. Así que quiero ordenar los objetos en el date
, y para todos los objetos en la misma fecha quiero ordenarlos en value
. ¿Cómo puedo hacer eso?Ordenar una base ArrayList en múltiples atributos
Respuesta
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());
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.
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. –
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;
}
});
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);
}
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 –
- 1. Ordenar una lista por atributos múltiples?
- 2. Java: ordenar una ArrayList en su lugar
- 3. Java: ¿cómo puedo ordenar múltiples ArrayList por su tamaño?
- 4. ¿Cómo ordenar un ArrayList usando múltiples criterios de clasificación?
- 5. Android ordenar el arraylist por propiedades
- 6. ordenar una matriz base en la tecla
- 7. Cómo ordenar un ArrayList de dos dimensiones
- 8. Uso del comparador para ordenar ArrayList Java
- 9. ¿Cómo puedo ordenar un ArrayList lexicográficamente?
- 10. Java: ¿cómo puedo dividir una ArrayList en múltiples ArrayLists pequeñas?
- 11. Ordenar un ArrayList basado en un campo de objeto
- 12. Rails ordenar entradas basadas en los atributos del modelo relacionado
- 13. ordenar múltiples listas basadas en una sola lista en python
- 14. Ordenar por múltiples claves utilizando diferentes ordenamientos
- 15. Uso de XSL para ordenar atributos
- 16. ¿Cómo puedo cortar una ArrayList de una ArrayList en Java?
- 17. Ruby ordenar por valores múltiples?
- 18. Cómo ordenar matrices múltiples en PHP
- 19. ¿Cómo ordenar con múltiples líneas en bash?
- 20. ordenar una matriz de Hash de múltiples teclas Perl
- 21. ArrayList <WeakReference <Runnable>> - ¿Cómo ordenar mejor?
- 22. la combinación de múltiples atributos en C#
- 23. Jquery agregar/eliminar múltiples atributos en seleccionar
- 24. ¿Debo extender ArrayList para agregar atributos que no sean nulos?
- 25. ¿Cómo verificar los atributos múltiples en XPath?
- 26. a través de múltiples atributos en XML
- 27. Cómo Obtener la lista de atributos de ArrayList de objetos
- 28. Agregando múltiples valores en ArrayList en un solo índice
- 29. ¿Es posible combinar múltiples atributos en F #?
- 30. Guardando ArrayList en la base de datos SQLite en Android
asumiendo 'valor' es una clase que implementa' Comparable' ... – harto