Kotlin mutableMap foreach

我的问题是更多的了解文件。 它说:

fun <K, V> Map<out K, V>.forEach( action: (Entry<K, V>) -> Unit) 

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

我想为listItems的每个项目计算价格的价值。 地图将一个字符串与一个项目相关联

 data class Item(val name: String, val description: String, val price: String, val index: Int) 

想象一下listItems包含了这个:

listItems [“shirt”] – > name:shirt,description:lorem ipsum,price:10,index:0

listItems [“shoes”] – >名称:shoes,描述:价格:30,index:0

所以代码会是这样的:

 var total: Int = 0 listItems.forEach { total += parseInt(value.price) } 

不过,我不明白如何访问这个参考文档的V value

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

 listItems.forEach { total += parseInt(it.value.price) } 

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

 listItems.forEach { entry -> total += parseInt(entry.value.price) } 

或者,从Kotlin 1.1开始,您可以在lambdas中使用解构 :

 listItems.forEach { (_, value) -> total += parseInt(value.price) } 

如果你只需要求和值,你可以使用sumBy { ... }

 val total = listItems.entries.sumBy { parseInt(it.value.price) } 

对于一些集合,而不是使用forEach ,我建议去sumByfold

您可以通过调用Map<K,V>上的值来获取底层值。 所以为了得到这个sum你可以这样做:

 val total = listItems.values.sumBy{ it.price.toInt() } 

现在没有必要引入一个可变的var