java.lang.IllegalStateException: Duplicate key


java.lang.IllegalStateException: Duplicate key

// list转map key重复 java.lang.IllegalStateException: Duplicate key DealerImageInfo

如果有形如下方代码,将List类型的entityList转为Map类型的entityMap,以Entity::getType(Entity的type字段)为Map的key,以entity对象为Map的value;

Map<Long, Entity> entityMap= entityList.stream().collect(Collectors.toMap(Entity::getType, Function.identity()));

此时如果entityList中entity对象的type有重复,就会抛出此异常;

解决方式:

  1. 保证待转化的List中各对象作为key的字段不重复;
  2. 使用toMap的重载方法,如下:该方法表示有重复数据时保留最先出现的数据
Map<Long, Entity> entityMap= entityList.stream().collect(Collectors.toMap(Entity::getType, Function.identity(), (entity1,entity2) -> entity1));

toMap方法的三种重载:

toMap(Function<? super T, ? extends K>, Function<? super T, ? extends U>):Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K>, Function<? super T, ? extends U>, BinaryOperator<U>):Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K>, Function<? super T, ? extends U>, BinaryOperator<U>, Supplier<M>):Collector<T, ?, M>

四个参数含义如下:

  1. 获取Key
  2. 获取value
  3. key重复时合并规则
  4. 最终的返回类型

第一个方法第3个参数默认置为throwingMerger()方法,表示有重复时抛出异常,就是题目中的异常

第二个方法可以自定义第3个参数,定义为(entity1,entity2) -> entity1,表示保留第一个数据

>参考:https://www.cnblogs.com/han-1034683568/p/8624447.html


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM