You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java Stream API按Account.number分组计算交易总和?

按账户编号分组计算交易总和的解决方案

我完全懂你的困扰——你想把交易数据按Account类的number字符串字段来分组,统计每个编号对应的交易总和,但目前的实现没能生成以这个字符串为键的Map。咱们来一步步解决这个问题:

核心思路

问题出在分组的键选择上:如果你直接用Account对象作为分组键,Map的键类型就是Account,而不是你需要的String。你需要在分组时明确指定提取账户编号作为键,同时用求和收集器计算每组的交易总和。

示例代码实现

假设你的两个类大致是这样的:

// Account类,包含number字段及对应getter
public class Account {
    private String number;
    // 其他字段...
    
    public String getNumber() {
        return number;
    }
    // 其他字段的getter方法...
}

// Transaction类,关联Account及sum字段及对应getter
public class Transaction {
    private Account account;
    private double sum;
    // 其他字段...
    
    public Account getAccount() {
        return account;
    }
    
    public double getSum() {
        return sum;
    }
    // 其他字段的getter方法...
}

正确的分组求和代码

用Java Stream API实现的话,只需要在Collectors.groupingBy()里指定提取编号的函数,搭配求和收集器即可:

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class TransactionHandler {
    public static void main(String[] args) {
        List<Transaction> transactions = // 你的交易数据列表
        
        // 生成以账户编号为String键、交易总和为值的Map
        Map<String, Double> accountTotalSum = transactions.stream()
                .collect(Collectors.groupingBy(
                        // 分组键:提取Account的number字符串
                        transaction -> transaction.getAccount().getNumber(),
                        // 分组值:计算该组所有交易的sum总和
                        Collectors.summingDouble(Transaction::getSum)
                ));
    }
}

关键细节说明

  • Collectors.groupingBy()的第一个参数是键生成函数:这里我们通过transaction -> transaction.getAccount().getNumber(),把每个交易关联的账户编号提取出来作为分组键,这样Map的键类型就变成String了。
  • 第二个参数是下游收集器:Collectors.summingDouble()用来计算每组内所有交易的sum字段总和,你可以根据实际字段类型换成summingInt()或summingLong()。
  • 如果存在Account的number为null的情况,分组后会出现一个键为null的条目,你可以根据业务需求提前过滤掉这类数据,比如在stream()后加上.filter(t -> t.getAccount() != null && t.getAccount().getNumber() != null)。

内容的提问来源于stack exchange,提问作者IvanSPb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:03:41