转载本文章请标明作者和出处
本文出自爱喝纯净水的南荣牧歌
缘起
今天线上产品经理新增了一个需求,其中我做了一个操作,将一个集合使用jdk8分解成一个map,结果抛出了异常,是因为map的键冲突了,那我我们就想了,如果我们想保留其中一个而不是直接抛出异常该怎么做呢?原代码如下:
Map<Integer, String> collect1 = attendanceRecordList.stream()
.collect(Collectors.toMap(AttendanceRecord::getPersonId, AttendanceRecord::getRecordTime);
解决
网上查询了一下解决方案,其实很简单,Collectors.toMap方法提供了第三个参数,我们可以指定在重复的时候使用新的还是旧的,就是是否需要将旧的覆盖,代码如下:
Map<Integer, String> collect1 = attendanceRecordList.stream()
.collect(Collectors.toMap(AttendanceRecord::getPersonId, AttendanceRecord::getRecordTime, (oldValue, newValue) -> oldValue));