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

Kotlin如何对对象列表内各元素的Mutable Map值求和并转换格式

实现方案

首先修正你示例代码里的Map初始化写法,Kotlin中没有{key=value}格式的Map字面量,需要用mutableMapOf()配合to关键字定义键值对,原始列表正确初始化如下:

var myList = listOf(
    Activity("A", prize = mutableMapOf("day_5" to 70, "day_4" to 70)), 
    Activity("B", prize = mutableMapOf("day_5" to 40, "day_4" to 80))
)

方案1:直接修改原列表中的Activity对象

如果允许修改原始对象属性,直接遍历列表修改每个对象的prize字段即可:

myList.forEach { activity ->
    // 对prize的所有非空值求和,prize为null时求和结果为0
    val sum = activity.prize?.values?.filterNotNull()?.sum() ?: 0
    // 替换为仅包含total的新Map
    activity.prize = mutableMapOf("total" to sum)
}

执行后myList里的对象就已经是你要的结果。

方案2:生成新的对象列表(不修改原对象,更推荐)

Kotlin数据类自带copy方法,可以基于原对象生成修改指定属性的新实例,配合map转换操作实现:

val resultList = myList.map { activity ->
    val sum = activity.prize?.values?.filterNotNull()?.sum() ?: 0
    activity.copy(prize = mutableMapOf("total" to sum))
}

转换后resultList就是符合要求的新列表,原列表myList不会被改动。

代码说明

  • prize?.values:安全调用获取Map的所有值,prize为null时整体返回null
  • filterNotNull():过滤掉值为null的元素,避免求和时出现空指针
  • sum():对Int类型的集合求和
  • ?: 0:空合并运算符,当prize为null时求和结果默认取0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 23:57:02