¿Cómo hago 2 métodos comparables en una sola clase?

Tengo una clase, que la ordeno ya por un atributo. Ahora necesito hacer otra cosa, que necesito crear otra forma de ordenar mis datos. ¿Cómo puedo hacerlo? Así puedo elegir entre los dos métodos. El único comando que conozco es Collections.sort que recogerá el método compareTo de la clase en la que quiero comparar sus datos.

¿Es posible?

Lo que debe hacer es implementar un Comparator personalizado. Y luego usa:

 Collections.sort(yourList, new CustomComparator()); 

Específicamente, podría escribir: (Esto creará una clase Anónima que implementa el Comparator ).

 Collections.sort(yourList, new Comparator(){ public int compare(YourClass one, YourClass two) { // compare using whichever properties of ListType you need } }); 

Podrías incorporarlos a tu clase si lo deseas:

 class YourClass { static Comparator getAttribute1Comparator() { return new Comparator() { // compare using attribute 1 }; } static Comparator getAttribute2Comparator() { return new Comparator() { // compare using attribute 2 }; } } 

Podría ser usado así:

 Collections.sort(yourList, YourClass.getAttribute2Comparator()); 

Solo puedes tener un compareTo() en tu clase.

Si desea ordenar la misma clase en más de una dirección, cree implementaciones de Comparator .

Si los dos métodos requieren exactamente la misma huella, puede sobrecargar de forma inapropiada una sola clase con múltiples usos, que se resolvería mediante la fijación de la jerarquía de clases, como en lugar de usar “forma”, subclasificarla con “oval”, “rectángulo” , etc.

Si la creación de subclases no tiene sentido, debe crear diferentes clases de comparación. En Java, a menudo usa un Comparador para las comparaciones. Cree varios (o cree un comparador configurable): IsbnComparator, AuthorComparator, etc.

Ah, y la opción configurable sería:

  BookComparator implementa Compartor {
    enum FIELD {AUTHOR, ISBN, ...};
    setSortOrder (int rank, campo FIELD) {...}
  }