Collectors.toMap Duplicate key问题

简介: 使用集合toMap方法,遇到Duplicate key问题

发现问题:

  在开发中,简化代码使用JDK8特性stream流式操作,应用Collectors.toMap方法时,出现Duplicate key问题。

代码和异常

实际代码:

        Map<String,SecurityGroupResource>securityGroupMap = securityGroupResources.stream()
                    .collect(Collectors.toMap(SecurityGroupResource::getSgid,a->a));  

异常:image.png

分析

Duplicate key 重复key。我们知道,map里key是唯一的。此时toMap方法不清楚取前值还是后值,故抛出异常。

解决方法

1、保证list转map时,key唯一(不推荐,代码问题不要用业务去保证唯一)
2、给toMap方法确定覆盖还是不覆盖。

覆盖(取后值):

        Map<String,SecurityGroupResource> securityGroupMap = securityGroupResources.stream()
                    .collect(Collectors.toMap(SecurityGroupResource::getSgid,a->a,(V1,V2)->V1)));  

不覆盖(留前值):

        Map<String,SecurityGroupResource> securityGroupMap = securityGroupResources.stream()
                    .collect(Collectors.toMap(SecurityGroupResource::getSgid,a->a,(V1,V2)->V2))); 

3、业务场景如果相同key的值要全部保存,就用Map>去解决。
先遍历集合

        securityGroupResources.stream().collect(Collectors.toMap(SecurityGroupResource::getSgid,
            a -> Arrays.asList(a),
                        (List<String> oldList, List<String> newList) -> {
                oldList.addAll(newList);
                return oldList;
            }));
相关文章
|
Java
实战小技巧9:List.subList使用不当StackOverflowError
相信每个小伙伴都使用过List.subList来获取子列表,日常使用可能没啥问题,但是,请注意,它的使用,很可能一不小心就可能导致StackOverflowError
738 0
|
2月前
|
人工智能 自然语言处理 数据可视化
三步入门:利用 Dify 可视化工作流连接 LLM 与工具
还在为如何将大语言模型与天气查询、数据处理等外部工具集成而烦恼?Dify的可视化工作流让这一切变得直观高效。无需处理复杂代码,只需拖拽节点、配置提示词和API参数,即可快速搭建从“用户提问”到“工具调用”再到“格式化回复”的完整AI应用链路。本文将手把手教你创建智能天气助手,解锁低门槛的AI应用开发。
|
Java Maven 开发者
@EnableFeignClients:简化微服务间调用的艺术
@EnableFeignClients:简化微服务间调用的艺术
2492 2
|
Arthas 监控 Java
Arthas profiler(使用async-profiler对应用采样,生成火焰图)
Arthas profiler(使用async-profiler对应用采样,生成火焰图)
1908 10
|
Java Maven
idea Maven Helper插件使用方法
idea Maven Helper插件使用方法
2316 0
idea Maven Helper插件使用方法
|
Java 数据库连接 数据库
springboot java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver应该如何解决
通过上述步骤,可以有效解决Spring Boot项目中遇到的 `java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver`问题。确保在项目中正确添加达梦数据库的JDBC驱动依赖,并在配置文件中正确配置数据源信息,是解决此问题的关键。通过这些方法,可以确保Spring Boot项目能够正确连接达梦数据库并正常运行。
2642 31
|
SQL 存储 数据库
数据库语言:DDL与DML详解
数据库语言:DDL与DML详解
5888 1
|
SQL 人工智能 Java
mybatis-plus配置sql拦截器实现完整sql打印
_shigen_ 博主分享了如何在MyBatis-Plus中打印完整SQL,包括更新和查询操作。默认日志打印的SQL用?代替参数,但通过自定义`SqlInterceptor`可以显示详细信息。代码示例展示了拦截器如何替换?以显示实际参数,并计算执行时间。配置中添加拦截器以启用此功能。文章提到了分页查询时的限制,以及对AI在编程辅助方面的思考。
3165 5
mybatis-plus配置sql拦截器实现完整sql打印
|
SQL Java 数据库连接
Mybatis Plus字段为空值时未更新解决方案
Mybatis Plus字段为空值时未更新解决方案
2518 1

热门文章

最新文章

下一篇
开通oss服务