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;
            }));
相关文章
|
缓存 Linux Windows
Linux环境aspose插件word转pdf中文乱码解决方案
Linux环境aspose插件word转pdf中文乱码解决方案
3032 0
|
SQL 关系型数据库 MySQL
将MySQL 数据迁移到 PostgreSQL
将MySQL 数据迁移到 PostgreSQL 可以采用以下步骤: 安装 PostgreSQL 数据库:首先,需要安装 PostgreSQL 数据库。可以从官方网站(https://www.postgresql.org/)下载最新版本的 PostgreSQL,并根据官方指南进行安装。 创建 PostgreSQL 数据库:在 PostgreSQL 中创建与 MySQL 数据库相对应的数据库。可以使用 pgAdmin 或命令行工具(如 psql)来创建数据库。例如,如果在 MySQL 中有一个名为 &quot;mydb&quot; 的数据库,那么可以在 PostgreSQL 中创建一个具有相同名称的数据库。 导
6368 0
|
2月前
|
人工智能 Java 定位技术
【SpringAIAlibaba新手村系列】(16)调用百度 MCP 服务
本章展示如何在客户端接入第三方百度 MCP 服务。通过 spring-ai-starter-mcp-client、application.yml 与 mcp-server.json5 完成 stdio 方式连接,自动发现并注册远端工具到 ChatClient,实现天气、IP 归属地、路线规划等能力调用。
610 9
|
3月前
|
Ubuntu 关系型数据库 Java
PostgreSQL数据库与PgVector向量插件基础使用
本文详细介绍了在Ubuntu系统上部署PgVector向量数据库并与SpringBoot集成的方法。主要内容包括:1) Ubuntu环境配置,包括PostgreSQL安装、PgVector插件编译和数据库设置;2) 向量数据库基础操作,如创建表、插入向量数据和相似度查询;3) SpringBoot集成方案,提供JDBC连接配置、实体类定义和JPA查询实现;4) SpringAI框架下的高级应用,展示如何将PgVector作为向量存储与AI模型集成。文章还包含远程连接配置、性能优化建议和完整的测试案例,为开发
1572 3
|
Java Maven 开发者
@EnableFeignClients:简化微服务间调用的艺术
@EnableFeignClients:简化微服务间调用的艺术
2634 2
|
Arthas 监控 Java
Arthas profiler(使用async-profiler对应用采样,生成火焰图)
Arthas profiler(使用async-profiler对应用采样,生成火焰图)
2092 10
|
Java 数据库连接 数据库
springboot java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver应该如何解决
通过上述步骤,可以有效解决Spring Boot项目中遇到的 `java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver`问题。确保在项目中正确添加达梦数据库的JDBC驱动依赖,并在配置文件中正确配置数据源信息,是解决此问题的关键。通过这些方法,可以确保Spring Boot项目能够正确连接达梦数据库并正常运行。
2801 31
|
JSON 前端开发 Java
深入理解 Spring Boot 中日期时间格式化:@DateTimeFormat 与 @JsonFormat 完整实践
在 Spring Boot 开发中,处理前后端日期交互是一个常见问题。本文通过 **@DateTimeFormat** 和 **@JsonFormat** 两个注解,详细讲解了如何解析前端传来的日期字符串以及以指定格式返回日期数据。文章从实际案例出发,结合代码演示两者的使用场景与注意事项,解决解析失败、时区偏差等问题,并提供全局配置与局部注解的实践经验。帮助开发者高效应对日期时间格式化需求,提升开发效率。
3943 2

热门文章

最新文章