list分组拼接

假设有如下的学生成绩列表:

List scores = Arrays.asList(
new Score(“张三”, “语文”, 80, “表现不错”),
new Score(“李四”, “数学”, 90, “做题认真”),
new Score(“张三”, “数学”, 85, “有进步”),
new Score(“李四”, “语文”, 75, “注意细节”),
new Score(“王五”, “语文”, 85, “思维活跃”),
new Score(“王五”, “数学”, 95, “数学天才”)
);

可以使用Java 8的Stream API对其进行分组、求和和组装对象,代码如下:

Map<String, Map<String, ScoreSummary>> result = scores.stream()
.collect(Collectors.groupingBy(Score::getName, // 根据姓名分组
Collectors.groupingBy(Score::getSubject, // 根据科目分组
Collectors.reducing(new ScoreSummary(), // 初始值为ScoreSummary的空对象
(s1, s2) -> new ScoreSummary(s1.getScore() + s2.getScore(), // 求和
s1.getRemark() + “;” + s2.getRemark()))))); // 备注拼接

// ScoreSummary类的定义
class ScoreSummary {
private int score;
private String remark;

public ScoreSummary() {
    this.score = 0;
    this.remark = "";
}

public ScoreSummary(int score, String remark) {
    this.score = score;
    this.remark = remark;
}

// 省略getter和setter方法

}

上述代码中,使用了两层groupingBy方法进行分组,最内层使用了reducing方法对每组的成绩进行求和和备注拼接,并将结果组装成ScoreSummary对象。最终得到的结果是一个Map<String, Map<String, ScoreSummary>>类型的对象,其中外层的键是姓名,内层的键是科目,值是ScoreSummary对象。可以根据需要对其进行进一步处理或输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值