解决java.lang.IllegalStateException:Duplicate key异常问题
java.lang.IllegalStateException:Duplicate key异常
使用场景
在实际应用开发中,会常把一个List的查询数据集合转为一个Map,那么在这里的 list.stream().collect()其实就是做了这么一件事情,它是java8的stream方式实现的它是以type为key,以entity对象为value构成Map。
//查询
List<QuestionCategoryEntity> list = questionCategoryService.selectList(entityWrapper);
Map<String, String> categoryMap = list.stream().collect(
Collectors.toMap(
QuestionCategoryEntity::getCategoryCode,
QuestionCategoryEntity::getCategoryName
)
);
在有些业务场景中会出现如下异常:Duplicate key ,map的key重复,如上的 QuestionCategoryEntity::getCategoryCode。
java.lang.IllegalStateException: Duplicate key 专项考试
at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
at java.util.HashMap.merge(HashMap.java:1245)
at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
... ...
解决方法
使用toMap()的重载方法,如果已经存在则不再修改,直接使用上一个数据。
//查询
List<QuestionCategoryEntity> list = questionCategoryService.selectList(entityWrapper);
Map<String, String> categoryMap = list.stream().collect(
Collectors.toMap(
QuestionCategoryEntity::getCategoryCode,
QuestionCategoryEntity::getCategoryName,
(entity1, entity2) -> entity1
)
);
等效于
questionCategoryService.selectList(entityWrapper);
Map<String, String> categoryMap = list.stream().collect(
Collectors.toMap(
QuestionCategoryEntity::getCategoryCode,
QuestionCategoryEntity::getCategoryName,
(entity1, entity2) {
return entity1
}
)
);(entity1, entity2) -> entity1 这里使用的箭头函数,也就是说当出现了重复key的数据时,会回调这个方法,可以在这个方法里处理重复Key数据问题,小编这里粗暴点,直接使用了上一个数据。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Java中comparator接口和Comparable接口的比较解析
这篇文章主要介绍了Java中comparator接口和Comparable接口的比较解析,Java提供了一个用于比较的接口Comparator和Comparable接口,提供了一个比较的方法,所有实现该接口的类,都动态的实现了该比较方法,需要的朋友可以参考下2023-08-08
Java -jar参数详解之掌握Java可执行JAR文件的运行技巧
做项目的时候我们肯定接触过很多jar包,下面这篇文章主要给大家介绍了关于Java -jar参数详解之掌握Java可执行JAR文件的运行技巧,文中通过代码介绍的非常详细,需要的朋友可以参考下2023-11-11
mybatis resultmap 如何为对象赋值的调用顺序
这篇文章主要介绍了mybatis resultmap 如何为对象赋值的调用顺序,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-01-01
Java IText异常NoClassDefFoundError: org/bouncycastle
在使用Java进行PDF文档操作时,iText是一个非常强大的库,然而,在实际开发过程中,可能会遇到一些异常情况,其中之一就是NoClassDefFoundError: org/bouncycastle/asn1/ASN1Encodable,本文将探讨这个错误的原因及其解决方案,需要的朋友可以参考下2025-02-02


最新评论