java stream流对象分组合并

比如有一个成绩对象

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