使用番石榴排序对对象列表进行多条件排序
我有一个类,无法实现可比性,但需要根据2个字段进行排序。我怎样才能用番石榴做到这一点?
假设该类是:
class X {
String stringValue;
java.util.Date dateValue;
}
我有一个列表:
List<X> lotsOfX;
我想首先根据值字段对它们进行排序,然后根据每个“值”字段的“组”中的日期值降序进行排序。
到目前为止,我一直在做的是:
List<X> sortedList = ImmutableList.copyOf(Ordering.natural().onResultOf(dateValueSortFunction).reverse().sortedCopy(lotsOfX));
sortedList = ImmutableList.copyOf(Ordering.natural().onResultOf(stringValueSortFunction).sortedCopy(sortedList));
这些函数定义为:
public class DateValueSortFunction<X> implements Function<X, Long> {
@Override
public Long apply(X input) {
return input.getDateValue().getTime(); //returns millis time
}
}
和:
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;
}
}
中的预期输出为:sortedList
Something 03/18/2013
Something 03/17/2013
Something else 03/20/2013
Something else 03/19/2013
....
我的方法有效,但对于两次遍历列表显然效率低下。有没有更好的方法来做到这一点?
我正在GWT应用程序中使用它。实现可比性不是一种选择。