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

完毕 【视频教程 感兴趣的伙伴可以瞅瞅】

早起的年轻人 CSDN认证博客专家 移动开发 项目管理 Java
只要用心去做,每一件事情还是有可能成功的,当然成功是没有界限的,只不过是达到自己心里的那个目标,公众号:我的大前端生涯,一个爱喝茶的程序员,通常会搞搞SpringBoot 、Herbinate、Mybatiys、Android、iOS、Flutter、Vue、小程序等.
问题描述 **Error:java: Internal error:** java.lang.IllegalArgumentException at org.eclipse.jdt.internal.compiler.tool.EclipseFileManager.handleOption(EclipseFileManager.java:758) at java.compiler@11.0.3/javax.tools.ForwardingJavaFileManager.handleOption(ForwardingJavaFileManager.java:99) at org.jetbrains.jps.javac.JpsJavacFileManager.handleOption(JpsJavacFileManager.java:318) at org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:71) at org.jetbrains.jps.incremental.java.JavaBuilder.compileJava(JavaBuilder.java:460) at org.jetbrains.jps.incremental.java.JavaBuilder.compile(JavaBuilder.java:330) at org.jetbrains.jps.incremental.java.JavaBuilder.doBuild(JavaBuilder.java:255) at org.jetbrains.jps.incremental.java.JavaBuilder.build(JavaBuilder.java:213) at org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1324) at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:1004) at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1071) at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:965) at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:794) at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:376) at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:178) at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:139) at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:288) at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:121) at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:228) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834) 尝试的解决方法: 我所有Jdk版本都改过来了,如下 (https://blog.csdn.net/wo541075754/article/details/82119860 "") 还是不管用。 我用Javac能编译,不报这个错。但是这个项目必须用eclipse编译。 下面是我配置的版本 ![图片说明](https://img-ask.csdn.net/upload/201910/10/1570678333_670537.png)![图片说明](https://img-ask.csdn.net/upload/201910/10/1570678338_83497.png)![图片说明](https://img-ask.csdn.net/upload/201910/10/1570678344_612385.png)![图片说明](https://img-ask.csdn.net/upload/201910/10/1570678348_889029.png)
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页