1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java8 stream to map_Java8 Stream 中 List 转 Map 问题总结

java8 stream to map_Java8 Stream 中 List 转 Map 问题总结

时间:2023-05-09 18:36:21

相关推荐

java8 stream to map_Java8 Stream 中 List 转 Map 问题总结

在使用 Java 的新特性 Collectors.toMap() 将 List 转换为 Map 时存在一些不容易发现的问题,这里总结一下备查。

空指针风险

java.lang.NullPointerException

现象

当 List 中有 null 值的时候,使用 Collectors.toMap() 转为 Map 时,会报 java.lang.NullPointerException

实例

List sdsTests = new ArrayList<>();

SdsTest sds1 = new SdsTest("aaa","aaa");

SdsTest sds2 = new SdsTest("bbb",null);

sdsTests.add(sds1);

sdsTests.add(sds2);

Map map = sdsTests.stream().collect(Collectors.toMap(SdsTest::getName, SdsTest::getAge));

System.out.println(map.toString());

---------

运行错误:

Exception in thread "main" java.lang.NullPointerException

at java.util.HashMap.merge(HashMap.java:1216)

at java.util.stream.Collectors.lambda$toMap$150(Collectors.java:1320)

.....

原因

原因是 toMap() 方法中使用 Map.merge() 方法合并时,merge 不允许 value 为 null 导致的,源码如下:

default V merge(K key, V value, BiFunction super V, ? super V, ? extends V> remappingFunction) {

Objects.requireNonNull(remappingFunction);

// 在这里判断了value不可为null

Objects.requireNonNull(value);

V oldValue

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。