0
在我的應用程序中,我需要按照請求的順序保留結果集合(用戶發送他想要的列表,並且希望以相同的順序回答他)。集合之間的複製順序
數據,我將發送給用戶的內容由底層生成,他們既不知道正確的順序,也不生成有序的結果。所以我必須自己訂購。
我的方法如下,但我認爲沒有必要實施它,因爲應該有一些標準的方法。那麼,你會推薦什麼?
public class KeepOrder {
/**
* Knows how to extract A from B.
*
* @param <A>
* @param <B>
*/
public interface Extractor<A, B> {
A extract(B from);
}
@SuppressWarnings("serial")
public static <T, F> Collection<T> keepOrder(final Collection<T> data, final Collection<F> order,
final Extractor<F, T> extractor) {
final Comparator<T> tComparator = new Comparator<T>() {
@Override
public int compare(final T o1, final T o2) {
final F field1 = extractor.extract(o1);
final F field2 = extractor.extract(o2);
for (final F currentField : order) {
if (currentField.equals(field1) && currentField.equals(field2)) {
return 0;
}
if (currentField.equals(field1)) {
return -1;
}
if (currentField.equals(field2)) {
return 1;
}
}
return 0;
}
};
return new TreeSet<T>(tComparator) {
{
addAll(data);
}
};
}
}
爲什麼不只是重寫compareTo? – jzd 2011-01-27 13:42:33
.compareTo()你的意思是什麼類?沒有.compareTo() –
2011-01-27 13:57:42