关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。
12个月前关门了。
改进这个问题
我尝试在流执行中以map的形式收集数据。
以确保我没有任何我正在使用的副本 merger function
但最终却得到了npe。
请参见代码段
streamableList().stream()
.filter(Objects::nonNull)
.filter(it-> nonNull(it.getKeyHere()))
.collect(toMap(it -> it.getKeyHere(),
it -> it.getValueHere(), (a1, a2) -> a1));
参见下面的例外
java.lang.NullPointerException: null
at java.util.HashMap.merge(HashMap.java:1216)
at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)....
.....and further calls of written code....
有人能提出为什么它在收集时失败以及如何解决吗?
2条答案
按热度按时间w1e3prcc1#
编辑
我只是查了一下
HashMap
来自Java1.8的代码。以下是片段。当要合并的值作为null
.原岗位
是的,正如@pshema所指出的
it.getValueHere()
退货null
,我们得到这个错误。这是复制品。h7appiyu2#
HashMap::merge
如果任何值为null,则引发。所以呢
getValueHere
必须返回null
. 只对项和键执行null检查,而不检查值。您可以添加另一个筛选器,或者确保您的类不包含空值。