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

如何在Kotlin中将MoneyTransaction列表按类别汇总金额生成Map?

解决方案

你可以通过两种常见方式实现按类别汇总总金额的需求:

方式一:先分组再求和

先使用groupBy按类别分组得到每个类别对应的交易列表,再通过mapValues对每组的金额求和:

val totalByCategory = transactionList.groupBy(MoneyTransaction::category)
    .mapValues { entry -> entry.value.sumOf { it.amount } }

如果你的Kotlin版本低于1.4,没有sumOf函数,可以替换成sumByDouble:

val totalByCategory = transactionList.groupBy(MoneyTransaction::category)
    .mapValues { entry -> entry.value.sumByDouble { it.amount } }

方式二:直接分组聚合(更高效)

使用groupingBy配合sumByDouble直接完成分组与求和,这种方式不需要创建中间的交易列表,性能更优:

val totalByCategory = transactionList.groupingBy(MoneyTransaction::category)
    .sumByDouble { it.amount }

为什么你的原有代码没得到总金额?

你之前写的groupBy({it.category},{it.amount}),第二个参数是用来转换每个分组内的元素,最终得到的是Map<String, List<Double>>(键是类别,值是该类别下所有交易的金额列表),而不是求和后的总金额。上面两种方法都是在分组的基础上完成了金额的聚合计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:25:22