为什么Collection没有getAll方法?

时间:2019-03-26 16:36:27

标签: java collections

我可能搜索不够,但找不到任何答案。

[{[Collection]<T>] [1]具有T get()方法,void add(T t)方法和void addAll(Collection<? extends T> c)方法。

那为什么我们没有Collection<? extends T> getAll(Predicate<? extends T> p)方法呢?

我知道创建一个子类来实现它并不难。但是我不明白为什么它还不是他们。

最新修改:

这里有一个具体的怀疑的例子。

我必须编码:

            wellsDisplayers = new ArrayList<DisplayWell>(Arrays.asList(displayerList.stream().filter(x->DisplayWell.class.isInstance(x)).toArray(DisplayWell[]::new)));

而不是:

wellsDisplayers = displayerList.getAll(x->DisplayWell.class.isInstance(x));

但是您是正确的流方法,它确实易于使用和理解,就像java的灵魂一样。

2 个答案:

答案 0 :(得分:3)

我认为您误解了Collection的概念。由于您已经拥有每个元素,因此没有getAll()方法。只需使用stream().filter()语法和collectmap即可完成

collection.stream().filter(x -> x..) // do stuff

答案 1 :(得分:0)

我认为您正在寻找Collection.removeIf(Predicate<? super E> filter),尽管您需要否定谓词逻辑。或者,您可以使用流:collection.stream().filter(p)

关于为什么没有getAll和其他方法一起使用的原因,我看不到Predicate参数的来源,如果你过滤掉一些。 addAll方法将添加所有元素,因此类似的方法getAll将获取所有元素,这只是集合本身,因此将是多余的。

此外,Collection甚至根本没有get()方法。也许您在考虑List.get(int)。我想您可能有一个类似getAll(int[])的“全部”版本,该版本返回所有给定索引处的元素,但是当subList(int, int)已经存在时,这似乎没有太大用处。