解决java.lang.IllegalStateException:Duplicate key异常问题

 更新时间:2025年03月08日 10:25:56   作者:早起的年轻人  
java.lang.IllegalStateException:Duplicatekey异常在将List转换为Map时出现,解决方法是使用toMap()的重载方法,如果已经存在则不再修改,直接使用上一个数据

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数据问题,小编这里粗暴点,直接使用了上一个数据。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SMBMS超市订单管理系统的网站源码

    SMBMS超市订单管理系统的网站源码

    这篇文章主要介绍了SMBMS超市订单管理系统,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • Java中comparator接口和Comparable接口的比较解析

    Java中comparator接口和Comparable接口的比较解析

    这篇文章主要介绍了Java中comparator接口和Comparable接口的比较解析,Java提供了一个用于比较的接口Comparator和Comparable接口,提供了一个比较的方法,所有实现该接口的类,都动态的实现了该比较方法,需要的朋友可以参考下
    2023-08-08
  • Java -jar参数详解之掌握Java可执行JAR文件的运行技巧

    Java -jar参数详解之掌握Java可执行JAR文件的运行技巧

    做项目的时候我们肯定接触过很多jar包,下面这篇文章主要给大家介绍了关于Java -jar参数详解之掌握Java可执行JAR文件的运行技巧,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • mybatis resultmap 如何为对象赋值的调用顺序

    mybatis resultmap 如何为对象赋值的调用顺序

    这篇文章主要介绍了mybatis resultmap 如何为对象赋值的调用顺序,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Java使用分治算法实现排序数索引功能示例【二分搜索】

    Java使用分治算法实现排序数索引功能示例【二分搜索】

    这篇文章主要介绍了Java使用分治算法实现排序数索引功能,结合具体实例形式分析了java分治算法进行排序索引的相关操作技巧,需要的朋友可以参考下
    2017-09-09
  • 动态上传jar包热部署的实战详解

    动态上传jar包热部署的实战详解

    开发系统过程中遇到的一个需求,系统给定一个接口,用户可以自定义开发该接口的实现,并将实现打成jar包,上传到系统中。系统完成热部署,并切换该接口的实现。本文详细介绍了实现方法,需要的可以参考一下
    2022-10-10
  • java爬虫jsoup解析HTML的工具学习

    java爬虫jsoup解析HTML的工具学习

    jsoup是一个解析HTML的第三方java库,它提供了一套非常方便的API,可使用DOM,CSS以及类jQuery的操作方法来取出和操作数据,本文就来开始jsoup的使用学习
    2022-07-07
  • Mybatis实现SQL存储流程详解

    Mybatis实现SQL存储流程详解

    MyBatis作为一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。它免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作
    2023-03-03
  • Java IText异常NoClassDefFoundError: org/bouncycastle/asn1/ASN1Encodable的解决方法

    Java IText异常NoClassDefFoundError: org/bouncycastle

    在使用Java进行PDF文档操作时,iText是一个非常强大的库,然而,在实际开发过程中,可能会遇到一些异常情况,其中之一就是​​NoClassDefFoundError: org/bouncycastle/asn1/ASN1Encodable​​,本文将探讨这个错误的原因及其解决方案,需要的朋友可以参考下
    2025-02-02
  • springMVC引入Validation的具体步骤详解

    springMVC引入Validation的具体步骤详解

    本文简单介绍如何引入validation的步骤,如何通过自定义validation减少代码量,提高生产力,非常具有实用价值,需要的朋友可以参考下
    2018-05-05

最新评论