首页 > 解决方案 > 在 Java 中的方法中将集合的集合合并到集合中

问题描述

我创建了一个 Collection 类,它扩展了 ArrayList 以添加一些有用的方法。它看起来像这样:

public class Collection<T> extends ArrayList<T> {
    //some methods...
}

我希望能够将一个集合集合到一个集合中,如下所示:

{{1, 2}, {2,3}, {1}, {2}, {}} -> {1, 2, 2, 3, 1, 2}

我对静态方法的外观有一个想法:

public static<E> Collection<E> unite(Collection<Collection<E>> arr) {
    Collection<E> newCollection = new Collection<>();

    for(Collection<E> element : arr) {
        newCollection.merge(element);
    }

    return newCollection;
}

但我不知道如何使此方法成为非静态方法(以便它不接受任何参数,如下所示:

Collection<E> list = listOfLists.unite();

)。这甚至可能吗?如果是的话,你能帮我吗?

标签: javaarraylist

解决方案


对任何具体类型都这样做是没有意义的T。如果T不是一个Collection类型,那么unite()是一个不相关的方法(ArrayListModified<Double>例如,如果你有一个,你不能把它展平,因为那很荒谬)。

所以你要么必须T限制集合:

public class ArrayListModified<E, T extends Collection<E>> extends ArrayList<T> {

    public Collection<E> unite() {
        Collection<E> newCollection = new ArrayList<>();

        for (Collection<E> element : this) {
            newCollection.addAll(element);
        }

        return newCollection;
    }
}

或者像在当前实现中一样使用带有一个ArrayListModified<ArrayListModified<E>>参数的静态方法(尽管它不需要是静态的)。


推荐阅读