Wielokryterialne sortowanie listy obiektów z kolejnością Guava

Mam klasę, KTÓRA NIE MOŻE zaimplementować porównywalnej, ale musi być posortowana na podstawie 2 pól. Jak mogę to osiągnąć dzięki Guava?

Powiedzmy, że klasa jest:

class X {
  String stringValue;
  java.util.Date dateValue;
} 

Mam ich listę:

List<X> lotsOfX;

Chcę je najpierw posortować w oparciu o pole wartości, a następnie bazując na dateValue malejącym w obrębie każdej „grupy” pól „value”.

Do tej pory robiłem:

List<X> sortedList = ImmutableList.copyOf(Ordering.natural().onResultOf(dateValueSortFunction).reverse().sortedCopy(lotsOfX));
sortedList = ImmutableList.copyOf(Ordering.natural().onResultOf(stringValueSortFunction).sortedCopy(sortedList));

Funkcje są zdefiniowane jako:

public class DateValueSortFunction<X> implements Function<X, Long> {

    @Override
      public Long apply(X input) {
        return input.getDateValue().getTime();  //returns millis time
      }
}

I:

public class StringValueSortFunction<X> implements Function<X, Integer> {

      @Override
        public Integer apply(X input) {
          if(input.getStringValue().equalsIgnoreCase("Something"))
            return 0;
          else if(input.getStringValue().equalsIgnoreCase("Something else"))
            return 1;
          else
            return 2;
        }
}

Oczekiwane wyjście wsortedList jest:

Something   03/18/2013
Something   03/17/2013
Something else  03/20/2013
Something else  03/19/2013
....

Moje podejście działa, ale jest oczywiście niewystarczające do dwukrotnego przeglądania listy. Czy jest na to lepszy sposób?

Używam tego w aplikacji GWT. Wdrożenie porównywalne nie jest opcją.

questionAnswers(3)

yourAnswerToTheQuestion