假设有一个成绩单的数据结构如下:
public class Score {
private String name;
private String subject;
private int score;
private String remark;
// 省略 getter 和 setter 方法
}
可以使用 Java 8 的 Stream API 对成绩单进行分组、求和和拼接。代码如下:
List scores = …; // 假设有一个成绩单列表
Map<String, Map<String, Score>> result = scores.stream()
.collect(Collectors.groupingBy(Score::getName,
Collectors.toMap(Score::getSubject, Function.identity(),
(s1, s2) -> new Score(s1.getName(), s1.getSubject(),
s1.getScore() + s2.getScore(),
s1.getRemark() + “;” + s2.getRemark()))));
上述代码中,首先使用 groupingBy
方法按照姓名进行分组,然后使用 toMap
方法按照科目进行分组。对于同一个姓名和科目的成绩,使用 Score
对象进行合并,将成绩相加,备注拼接。最终得到一个以姓名为键,以科目为键的嵌套 Map,其中每个值是一个 Score
对象,表示该学生在该科目上的成绩和备注。