用stream转map很容易碰到key重复的情况,具体的处理方式可以取决于具体业务。看到有篇举例得较详细的文章,记录一波:java8 对象转map时重复key Duplicate key xxxx
上文主要列举三种处理方式:
1.后值覆盖前值:
Map<String, String> map = list.stream().collect(Collectors.toMap(Student :: getClassName, Student :: getStudentName,
(value1, value2 )->{
return value2;
}));
//或者简写
Map<String, String> map = list.stream().collect(Collectors.toMap(Student :: getClassName, Student :: getStudentName,
(key1 , key2)-> key2 ));
2.后值累加前值或处理:
Map<String, String> map = list.stream().collect(Collectors.toMap(Student :: getClassName, Student :: getStudentName,
(key1 , key2)-> key1 + "," + key2 ));
输出:
{一年级三班=翠花,香兰, 一年级二班=小明,小芳,小华}
3.按重复的key再分组处理:
Map<String, List<String>> map = list.stream().collect(Collectors.toMap(Student :: getClassName,
// 此时的value 为集合,方便重复时操作
s -> {
List<String> studentNameList = new ArrayList<>();
studentNameList.add(s.getStudentName());
return studentNameList;
},
// 重复时将现在的值全部加入到之前的值内
(List<String> value1, List<String> value2) -> {
value1.addAll(value2);
return value1;
}
));
输出:
{一年级三班=[翠花, 香兰], 一年级二班=[小明, 小芳, 小华]}
详情见原文!
补充:
1.按时间逆序:
//按时间逆序
resList.sort(Comparator.comparing(PositionChangesAppDTO::getCreateTime).reversed());