java - 在 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();
)。这甚至可能吗?如果是的话,你能帮我吗?
解决方案
对任何具体类型都这样做是没有意义的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>>
参数的静态方法(尽管它不需要是静态的)。
推荐阅读
- php - 如何根据php中的键添加数组的总和值
- google-cloud-firestore - FireStore 中的引用文档是否知道其父文档?
- emacs - 如何过滤要包含/排除在时钟表中的标签
- angular - Angular:如何始终重新加载 URL 但忽略片段?(使用 RunGuardsAndResolvers ?)
- javascript - 为什么填充数组时猫鼬填充不起作用?
- pyspark - 如何在pyspark中过滤布尔列
- php - 如何循环 + 7 天并根据该循环显示数据
- c# - 读取 DataGridView 时崩溃
- c++ - 案例标签值已经出现错误
- python-3.x - 我想在列表中添加“100”所以使用附加方法