比如有一个成绩对象
@Data
public class Chengji {
// 学号
private String studentId;
// 学科
private String subjectId;
// 分数
private Long score;
}
现在目标是获取每个学生的总分
// 模拟的成绩列表
List<Chengji> cjs = new ArrayList<>();
// 利用stream流 按 学号 分组,并且将分组内容里的分数相加
Map<String, Chengji> result = cjs.stream().collect(Collectors.toMap(Chengji::getStudentId, Function.identity(), (v1, v2) -> {
v1.setScore(v1.getScore() + v2.getScore());
return v1;
}));
如果要去重并排序
List<Chengji> res = cjs.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Chengji::getStudentId))),ArrayList::new)
);