【发布时间】:2018-05-31 19:40:19
【问题描述】:
我已阅读该主题:
Collectors.groupingBy doesn't accept null keys
但我不明白如何将其应用于我的问题:
我的代码:
Map<String, List<MappingEntry>> mappingEntryMap = mapping.getMappingEntries()
.stream()
.collect(Collectors.groupingBy(MappingEntry::getMilestone, Collectors.mapping(e -> e, Collectors.toList())));
对我来说MappingEntry::getMilestone 有时可以返回 null。我的情况没问题,但我明白了:
Caused by: java.lang.NullPointerException: element cannot be mapped to a null key
at java.util.Objects.requireNonNull(Objects.java:228)
at java.util.stream.Collectors.lambda$groupingBy$45(Collectors.java:907)
at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
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)
如何避免此异常?
【问题讨论】:
-
先过滤空值怎么样?
-
@Eugene 这对我来说是不允许的。我不能丢失数据。链接主题中描述的这种方法
-
@gstackoverflow 为所有
null键应用默认键怎么样? -
也可以将
Collectors.mapping(e -> e, Collectors.toList())简化为Collectors.toList() -
@Lino … 和
Collectors.toList()在使用Collectors.groupingBy时可以省略。
标签: java java-8 grouping java-stream