java - 在集合之间复制顺序

标签 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);
        }
    };

}

}

最佳答案

如果顺序在您的集合中很重要,您应该限制自己使用列表

来自the documentation of List :

An ordered collection (also known as a sequence). The user of this interface has precise control over where in the list each element is inserted. The user can access elements by their integer index (position in the list), and search for elements in the list.

关于java - 在集合之间复制顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4817003/

相关文章:

java - ssh后在bash脚本中运行两个java程序

java - 数组List中的空指针异常

javascript - List.js - 按价格排序的问题(带有逗号和点的数字)

java - java的LinkedList类中的元素是否有索引?

objective-c - 对 NSSet 中所有对象的属性求和的快速方法?

java - 如何从列表中删除重复的自定义对象?

Java 对日期时间值的集合进行排序

java - 从当前位置到 poi 的路线 android map v2

javascript - 按 Angular 6 中的对象字段对对象数组进行排序

python - 如何按其中一个值对字典列表进行排序,但打印另一个键的值?