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

如何在Kotlin中使用compute函数修改MutableMap的所有值(不改变键)

Kotlin中原地修改MutableMap所有值(不创建副本)

如果你想在不修改键、不创建原映射副本的前提下,重新计算MutableMap中所有条目的值,以下是几种可行的实现方式:

使用compute函数(对应你提供的Java实现)

Kotlin的MutableMap继承了Java的Map接口,因此可以直接使用compute函数。对应你给出的Java代码,Kotlin实现如下:

val mutableMap = mutableMapOf("key1" to "value1", "key2" to "value2")

// 遍历所有键,用compute原地更新值
mutableMap.keys.forEach { key ->
    mutableMap.compute(key) { k, v -> "$k__$v" }
}

compute函数的逻辑是:接收目标键和一个转换函数,转换函数的参数为当前键k和对应的值v,返回的新值会直接替换原映射中该键对应的值,全程不会创建新的映射副本。

更简洁的Kotlin风格实现

除了compute,你还可以用更贴合Kotlin语法的方式原地修改值,代码更直观:

方式1:遍历条目并直接更新值

mutableMap.entries.forEach { entry ->
    entry.setValue("${entry.key}__${entry.value}")
}

方式2:直接遍历键值对并赋值

mutableMap.forEach { key, value ->
    mutableMap[key] = "$key__$value"
}

这两种方式同样是原地修改原映射,不会产生副本,在单线程场景下使用起来比compute更简洁。如果是多线程环境,compute的原子性更新特性会更有优势。

注意:mapValues函数会返回一个新的只读映射,原映射不会被修改,这也是你不想使用它的原因,以上所有方式都避免了这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:20:25