java.lang.IllegalStateException: Duplicate key 20
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java.lang.IllegalStateException: Duplicate key 20,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3006字,纯文字阅读大概需要5分钟。
内容图文
![java.lang.IllegalStateException: Duplicate key 20](/upload/InfoBanner/zyjiaocheng/739/41ee013100d94dea98a5f29ffcd201b4.jpg)
这个我在公司遇到的一个问题。原因:
使用Map<String, String> RelationMap = relation.stream().collect(Collectors.toMap(s -> s[2], s -> s[1], (oldValue, newValue) -> newValue)))
转换过程中出现重复的Key。导致有多个value程序不知道应该取哪个的问题。
正常案例
老师跟班级之间的关系,每一个老师都负责一个班级。
1 @Data 2 public class TeacherClass { 3 4 /**主键ID*/ 5 private int id; 6 7 /**教师ID*/ 8 private int teachId; 9 10 /**班级ID*/ 11 private int classId; 12 13 public TeacherClass(int id, int teachId, int classId) { 14 this.id = id; 15 this.teachId = teachId; 16 this.classId = classId; 17 } 18 }
老师与班级的关系
实际应用代码
1 //查询所有老师负责的班级(一个老师对应一个班级) 2 List<TeacherClass> list = new ArrayList<>(20); 3 int count = 10; 4 for (int i = 0; i < count; i++) { 5 list.add(new TeacherClass(i, 100 + i, 200 + i)); 6 } 7 8 //结果返回每个老师对应的班级ID 9 Map<Integer, Integer> collect = list.stream().collect(Collectors.toMap(TeacherClass::getTeachId, TeacherClass::getClassId)); 10 System.out.println("老师负责的班级ID:" + collect);
执行结果如下
显然是OK的
错误案例
假设这个时候程序出了一个bug, 导致有一个老师负责两个班级。那么再执行之前的代码会有什么问题呢?
1 //查询所有老师负责的班级(一个老师对应一个班级) 2 List<TeacherClass> list = new ArrayList<>(20); 3 int count = 10; 4 for (int i = 0; i < count; i++) { 5 list.add(new TeacherClass(i, 100 + i, 200 + i)); 6 } 7 8 //程序出了一个bug,导致有一个老师负责两个班级 9 list.add(new TeacherClass(50, 100, 300)); 10 11 //结果返回每个老师对应的班级ID 12 Map<Integer, Integer> collect = list.stream().collect(Collectors.toMap(TeacherClass::getTeachId, TeacherClass::getClassId)); 13 System.out.println("老师负责的班级ID:" + collect);
执行结果如下
显然是有问题的。原因就是出现了重复的Key, 那么怎么解决呢?
很简单,将Collectors.toMap(TeacherClass::getTeachId, TeacherClass::getClassId) 替换为Collectors.toMap(TeacherClass::getTeachId, TeacherClass::getClassId, (aLong, aLong2) -> aLong2 >= aLong ? aLong2 : aLong);
(aLong, aLong2) -> aLong2 >= aLong ? aLong2 : aLong表示的是出现重复Key的执行逻辑,如果出现重复Key取最大的value。具体逻辑可以自己定义
实际应用代码
1 //查询所有老师负责的班级(一个老师对应一个班级) 2 List<TeacherClass> list = new ArrayList<>(20); 3 int count = 10; 4 for (int i = 0; i < count; i++) { 5 list.add(new TeacherClass(i, 100 + i, 200 + i)); 6 } 7 8 //程序出了一个bug,导致有一个老师负责两个班级 9 list.add(new TeacherClass(50, 100, 300)); 10 11 //结果返回每个老师对应的班级ID 12 Map<Integer, Integer> collect = list.stream().collect(Collectors.toMap(TeacherClass::getTeachId, TeacherClass::getClassId 13 , (aLong, aLong2) -> aLong2 >= aLong ? aLong2 : aLong)); 14 System.out.println("老师负责的班级ID:" + collect);
至此问题就解决了
内容总结
以上是互联网集市为您收集整理的java.lang.IllegalStateException: Duplicate key 20全部内容,希望文章能够帮你解决java.lang.IllegalStateException: Duplicate key 20所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。