Collectors.toMap的坑 按照常规思维,往一个map里put一个已经存在的key,会把原有的key对应的value值覆盖,然而通过一次线上问题,发现java8中的Collectors.toMap反其道而行之,它默认给抛异常,抛异常... 线上业务代码出现Duplicate Key的异常,影响了业务逻辑,查看抛出异常部分的代码,类似以下写法: Mapmap = list.str...
personList.stream().filter(e -> e.getAge() != null).collect(Collectors.toMap(Person::getName, Person::getAge)); 这样就轻松解决了HashMap.merge空指针异常问题,但是如果你想保留为null的值,那就可以使用Optional: // 使用 Optional 来获取值,若为null,则返回默认值"" personList.stream().collect(C...
Map<String, String>collect;try{//错误演示 未处理value为null的情况//原理:Collectors.toMap底层是基于Map.merge方法来实现的,而merge中value是不能为null的,如果为null,就会抛出空指针异常collect = list.stream().collect(Collectors.toMap(TestClass::getId, TestClass::getName, (s, s2) ->s2)); System....
当需要将一个List转换为Map时,可以使用 Java 8 中的Collectors.toMap()方法,Map是由key-value组成的键值对集合,在使用Collectors.toMap()方法时,如果值为空,会报空指针异常,下面通过一个实例来验证一下。 首先定义一个Student.java类 packagecom.magic.npe;publicclassStudent{privateString name;privateInteger age;...
Java 8中Collectors.toMap空指针异常源码分析 当需要将一个List转换为Map时,可以使用 Java 8 中的 Collectors.toMap() 方法,Map是由key-value组成的键值对集合,在使用Collectors.toMap() 方法时,如果值为空,会报空指针异常,下面通过一个实例来验证一下。
Map<String,String>map=dataList.stream().collect(Collectors.toMap(MyData::getId,MyData::getName))); 如果dataList 中的某个 name 字段为 null 值,此时整个 stream 语句的执行就会报错:空指针异常。 解决 这个算是 java8 版本的 bug,java9 版本之后已经修复。
用Collectors的toMap方法转换List,一般会遇到两个问题。 转换map,key重复问题; 1.重复时用后面的value 覆盖前面的value 2.重复时将前面的value 和后面的value拼接起来; 3.重复时将重复key的数据组成集合 另一个是空指针异常,即转为map的value是null package core.stream; ...
具有重复键的toMap是Java-Stream中的一个方法,用于将流中的元素转换为一个Map对象。当流中的元素存在重复键时,toMap方法提供了解决冲突的方式。 toMap方法的语法如下: 代码语言:txt 复制 toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U>...
jdk8Stream tomap 存在bug,value为null是会报错空指针: 1.list转map 当map的value值为空时会报错空指针异常,有以下两种处理方式: //解决方案一,使用Optional类处理null HashMap<String, String> cityProvinceMap = cityProvinceList.stream().collect(Collectors.toMap(s -> Optional.ofNullable(s.getCityName())...
// 空指针异常 bookList.stream.collect(Collectors.toMap(Person::getName, Person::getPhoneNumber)); 下面我们来解释一下原因。 首先,我们来看 java.util.stream.Collectors 类的 toMap 方法 ,可以看到其内部调用了 Map 接口的 merge 方法。 publicstatic<T, K, U, M extends Map<K, U>> ...