分组求和拼接

文章展示了如何利用Java8的StreamAPI对成绩单数据结构进行操作,通过groupingBy方法按姓名分组,再用toMap方法按科目分组。在同一姓名和科目的成绩上,代码合并了Score对象,相加了成绩并拼接了备注,生成了一个嵌套Map,以姓名和科目为键,值为合并后的Score对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设有一个成绩单的数据结构如下:

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 对象,表示该学生在该科目上的成绩和备注。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值