Can Java#39;s Stream.collect() return null?(Java 的 Stream.collect() 可以返回 null 吗?)
问题描述
Stream.collect() 的 JavaDoc 说它返回归约的结果".这并不能告诉我这样的代码是否可以为 filteredList
返回 null:
The JavaDoc for Stream.collect() says that it returns "the result of the reduction". That doesn't tell me if code like this can return null for filteredList
:
List<String> filteredList = inputList.stream()
.filter(c -> c.isActive())
.collect(Collectors.toList());
我希望如果它可以返回 null,那么它会返回一个 Optional
,但它也没有这么说.
I would expect that if it could return null then it would return an Optional
, but it doesn't say that either.
是否记录了 Stream.collect()
是否可以返回 null?
Is it documented anywhere whether Stream.collect()
can return null?
推荐答案
Collector.toList()
将为您返回一个 empty 列表.
Collector.toList()
will return an empty List for you.
这里是实现:
public static <T>
Collector<T, ?, List<T>> toList() {
return new CollectorImpl<>((Supplier<List<T>>) ArrayList::new, List::add,
(left, right) -> { left.addAll(right); return left; },
CH_ID);
}
如您所见,ArrayList::new
被用作您的项目的容器.
As you can see ArrayList::new
is being used as a container for your items.
来自 Collector 的 JavaDoc:
From JavaDoc of Collector:
可变归约运算将输入元素累积到可变结果容器中,可选之后将累积的结果转换为最终表示所有输入元素都已处理.减少操作可以顺序或并行执行.
A mutable reduction operation that accumulates input elements into a mutable result container, optionally transforming the accumulated result into a final representation after all input elements have been processed. Reduction operations can be performed either sequentially or in parallel.
收集器由四个共同作用的函数指定将条目累积到可变结果容器中,并且可以选择对结果执行最终转换.它们是:
A Collector is specified by four functions that work together to accumulate entries into a mutable result container, and optionally perform a final transform on the result. They are:
创建新的结果容器(supplier())
将新数据元素合并到结果容器中(accumulator())
incorporating a new data element into a result container (accumulator())
和
使用收集器的减少的顺序实现将使用供应商函数创建单个结果容器,并且为每个输入元素调用一次累加器函数.一个并行实现会对输入进行分区,创建结果每个分区的容器,累加每个分区的内容分区为该分区的子结果,然后使用combiner 函数将子结果合并成一个组合结果.
A sequential implementation of a reduction using a collector would create a single result container using the supplier function, and invoke the accumulator function once for each input element. A parallel implementation would partition the input, create a result container for each partition, accumulate the contents of each partition into a subresult for that partition, and then use the combiner function to merge the subresults into a combined result.
所以只要你不做一些奇怪的事情,比如组合函数返回 null
,Collector
总是至少返回一个 可变容器
使用您提供的 supplier
函数.
So as long as you don't do weird things like combine function return null
, the Collector
always return at least a mutable container
using your provided supplier
function.
而且我认为如果一个实现会返回 null
容器是非常违反直觉的.
And I think it's very counter-intuitive if an implementation would ever return null
container.
这篇关于Java 的 Stream.collect() 可以返回 null 吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Java 的 Stream.collect() 可以返回 null 吗?
基础教程推荐
- 降序排序:Java Map 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01