Ill*_*huk 0 java sorting collections
在我的应用程序中,我需要按照请求的顺序保持结果集合(用户发送他想要的列表,并且希望以相同的顺序回答他).
数据,我将发送给用户的内容由底层图层生成,它们既不知道正确的顺序,也不生成有序的结果.所以我必须自己订购.
我的方法是遵循,但我认为没有必要实现它,因为应该有一些标准的方法.那么,你会推荐什么?
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);
}
};
}
Run Code Online (Sandbox Code Playgroud)
}