java.lang.IllegalStateException: Duplicate key 20
? 这个我在公司遇到的一个问题。原因: 正常案例老师跟班级之间的关系,每一个老师都负责一个班级。 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,200 + i)); 6 } 7 8 //程序出了一个bug,导致有一个老师负责两个班级 9 list.add(new TeacherClass(50,100,300)); 10 11 //结果返回每个老师对应的班级ID 12 Map<Integer,TeacherClass::getClassId)); 13 System.out.println("老师负责的班级ID:" + collect); ? ? 执行结果如下 ? 显然是有问题的。原因就是出现了重复的Key,那么怎么解决呢? ? (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,200 + i)); 6 } 7 8 //程序出了一个bug,TeacherClass::getClassId 13,aLong2) -> aLong2 >= aLong ? aLong2 : aLong)); 14 System.out.println("老师负责的班级ID:" + collect); ? ? ? 至此问题就解决了 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |