Implementar una costumbre Comparator
, utilizando un método compare(a,b)
como la siguiente:
de Java convencionales:
public int compare(YourObject o1, YourObject o2) {
int result = o1.getProperty1().compareTo(o2.getProperty1()));
if(result==0) result = o1.getProperty2().compareTo(o2.getProperty2());
return result;
}
Con Guava (usando ComparisonChain
):
public int compare(YourObject o1, YourObject o2) {
return ComparisonChain.start()
.compare(o1.getProperty1(), o2.getProperty1())
.compare(o1.getProperty2(), o2.getProperty2())
.result();
}
Con Commons/Lang (usando CompareToBuilder
):
public int compare(YourObject o1, YourObject o2) {
return new CompareToBuilder()
.append(o1.getProperty1(), o2.getProperty1())
.append(o1.getProperty2(), o2.getProperty2())
.toComparison();
}
(Las tres versiones son equivalentes, pero la versión Java simple es la más prolija y, por lo tanto, más propensa a errores. Las tres soluciones asumen que tanto o1.getProperty1()
como o1.getProperty2()
implementan Comparable
).
(Tomado de this previous answer of mine)
ahora lo hacen Collections.sort(yourList, yourComparator)
@Krt_Malta más claro uno? No lo creo. Por un lado, utiliza la versión pre-1.5 no genérica del comparador, que es mucho más prolijo y propenso a errores. La respuesta de I82Much es mucho mejor, por ejemplo. –
De hecho, estoy de acuerdo en que debería haber hecho la versión genérica del comparador, y la cadena de comparación Guava suena como algo que vale la pena investigar si está contento de incorporar esa dependencia a su proyecto. (Presumiblemente tiene muchas otras cosas buenas también). – unnamedwill
@unnamedwill por curiosidad, si acepta que es mejor usar el Comparador, ¿por qué no edita su respuesta? En este momento la respuesta de I82Much es la tercera en votos, por lo que algunas personas muy apresuradas podrían no leerla o estos comentarios y simplemente implementar su respuesta sin medicamentos genéricos. –
Blueriver