栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Stream的collect时使用Collectors.toMap()出现 “Duplicate key xxx”

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Stream的collect时使用Collectors.toMap()出现 “Duplicate key xxx”

概述

  先说明一下我使用这个方法的场景。我有一个User对象的list集合,需要提取其中的id作为map集合的key,name作为map集合value,(其实就是将所有user对象的id和name放到一个map集合中)具体如下:

List list = new ArrayList<>();
// ... 此处省略向list集合中添加User对象
Map map = list.stream().collect(Collectors.toMap(User::getId,User::getName));

  这个时候出现了错误“java.lang.IllegalStateException: Duplicate key xxx”,本来我想的是id作为key,如果出现重复那么就合并留一个就行,但是代码提示出现了这个错误。

错误异常原因

  查找了错误的异常的原因,查看源码发现,这个Collectors.toMap使用了Map集合的merge方法,本来这个方法是没有问题的,关键是Collectors.toMap这个方法里面写了这个异常,如果你写入的值有重复就会出现异常。

  也就是说,只要你的key(这里是user的id)出现重复,就会爆出这个异常。不过这个Collectors的toMap也有其他的重载方法,可以使用重载的避免这个问题。如下:

List list = new ArrayList<>();
// ... 此处省略向list集合中添加User对象
Map map = list.stream().collect(Collectors.toMap(User::getId,User::getName,(oldValue,newValue)->newValue)); //最后的使用需要参考Map集合的merge方法的使用
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/283909.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号