Kotlin mutableMap foreach

elo*_*loo 10 kotlin

我的问题是更多地了解文档.它说:

fun <K, V> Map<out K, V>.forEach(
action: (Entry<K, V>) -> Unit)
Run Code Online (Sandbox Code Playgroud)

但是我不明白如何实现它.我如何获得循环中的键和值?

我想listItems在价格的价值中为每个项目求和.地图将字符串与项目相关联

data class Item(val name: String, val description: String, val price: String, val index: Int)
Run Code Online (Sandbox Code Playgroud)

想象一下listItems包含这个:

listItems ["shirt"] - >名称:衬衫,描述:lorem ipsum,价格:10,指数:0

listItems ["shoes"] - >名称:鞋子,描述:lorem ipsum,价格:30,指数:0

所以代码将是这样的:

var total: Int = 0
listItems.forEach {
       total += parseInt(value.price)
    }
Run Code Online (Sandbox Code Playgroud)

但是我不明白如何访问这个value引用V文档

hot*_*key 15

您传递给lambda的lambda forEach { ... }接受一个Entry<K, V>,你可以使用这个条目,访问它value:

listItems.forEach { total += parseInt(it.value.price) }
Run Code Online (Sandbox Code Playgroud)

这相当于使用显式lambda参数:

listItems.forEach { entry -> total += parseInt(entry.value.price) }
Run Code Online (Sandbox Code Playgroud)

或者,从Kotlin 1.1开始,您可以在lambda中使用destructuring:

listItems.forEach { (_, value) -> total += parseInt(value.price) }
Run Code Online (Sandbox Code Playgroud)

如果您只需要对值进行求和,则可以使用sumBy { ... }:

val total = listItems.entries.sumBy { parseInt(it.value.price) }
Run Code Online (Sandbox Code Playgroud)