我有一个类,无法实现comparable接口,但是需要基于2个字段进行排序。我该如何使用Guava实现?
假设该类为:
class X {
String stringValue;
java.util.Date dateValue;
}
我有一个这样的列表:
List<X> lotsOfX;
我希望按照'value'字段的值进行排序,然后在每个'value'字段的“组”中按照'dateValue'字段的降序排序。
到目前为止我一直在做的是:
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 应用程序中。实现 Comparable 不是一个选择。