Kotlin Map and Compute Functions



我试图在不改变键的情况下重新计算可变映射中所有条目的值。

下面是代码(注释显示了我所期望的)

fun main(args: Array<String>) {
var exampleMap: MutableMap<Int, String> = mutableMapOf(1 to "One", 2 to "Two")
// Before it's {1-"One", 2-"Two"}
with(exampleMap) {
compute(k){
_,v -> k.toString + "__" + v
}
}
// Expecting {1->"1__One", 2->"2__Two"}

}

我不想使用mapValues,因为它创建了原始地图的副本。我认为compute是我需要的,但我正在努力写这个函数。或者说,我不知道该怎么写。我知道Java中的等效(因为我是一个Java人),它将是:

map.entrySet().stream().forEach(e-> map.compute(e.getKey(),(k,v)->(k+"__"+v)));

我如何在Kotlin中实现compute?

问候,

最好的方法是遍历地图的entries。这可以确保您避免任何潜在的并发修改问题,这些问题可能是由于在迭代映射时修改映射而引起的。

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

使用onEach函数:

var exampleMap: MutableMap<Int, String> = mutableMapOf(1 to "One", 2 to "Two")
println(exampleMap)
exampleMap.onEach {
exampleMap[it.key] = "${it.key}__${it.value}"     
}
println(exampleMap)

输出:

{1=One, 2=Two}
{1=1__One, 2=2__Two}

onEach对每个元素执行给定的操作,然后返回列表/数组/映射本身。

最新更新