Java8 Stream 中的 Collectors.toMap 集合注意点

说明

在使用 Java8 中的 stream 时,如果使用 stream 生成 Map,要注意 key,value 不能为 null 值。
例如:

Map<String, String> map = dataList.stream().collect(Collectors.toMap(MyData::getId, MyData::getName)));

如果 dataList 中的某个 name 字段为 null 值,此时整个 stream 语句的执行就会报错:空指针异常。

解决

这个算是 java8 版本的 bug,java9 版本之后已经修复。
在 Java 8 中可以使用下面的方式解决:
1、如果是null,就设置成一个特定值,然后再处理
2、使用collect(Supplier<R> supplier, BiConsumer<R, ? super T> accumulator, BiConsumer<R, R> combiner)去收集,这个可允许null值
3、使用Optional类封装,收集成值类型为Optional的Map,然后处理

例如:

Map<String, String> map = dataList.stream()
                    .collect(Collectors.toMap(MyData::getId, p -> Optional.ofNullable(p.getName())
                            .orElse("")));
datalist.stream().collect(HashMap::new,(n,v)->n.put(v.getId(),v.getName()), HashMap::putAll);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容