一、java.lang.IllegalStateException: Duplicate key报错的原因
- map的key重复导致的报错Duplicate key
二、java.lang.IllegalStateException: Duplicate key报错的解决方式
-
list.stream().collect()就是把一个List的查询数据集合转为一个Map,java8的stream方式实现的它是以type为key,以entity对象为value构成Map。代码示例如下:
public class Test1 { public static void main(String[] args) { List<Users> list = new ArrayList<>(); Users user1 = new Users().builder().ages(20).names("zhansan").build(); Users user2 = new Users().builder().ages(23).names("zhansan").build(); list.add(user1); list.add(user2); Map<String, Integer> usersMap=list.stream().collect( Collectors.toMap( Users::getNames, Users::getAges ) ); System.out.println(usersMap.toString()); } }
-
使用toMap()的重载方法,如果已经存在则不再修改,直接使用上一个数据。修改后的代码示例如下:
public class Test1 { public static void main(String[] args) { List<Users> list = new ArrayList<>(); Users user1 = new Users().builder().ages(20).names("zhansan").build(); Users user2 = new Users().builder().ages(23).names("zhansan").build(); list.add(user1); list.add(user2); Map<String, Integer> usersMap=list.stream().collect( Collectors.toMap( Users::getNames, Users::getAges, (entity1, entity2) -> entity1 ) ); System.out.println(usersMap.toString()); } }
-
(entity1, entity2) -> entity1 的含义
这里使用的箭头函数,也就是说当出现了重复key的数据时,会回调这个方法,可以在这个方法里处理重复Key数据问题, -
再次运行,输出结果如下: