我的问题更多是要理解文档。它说:
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中[ “衬衣”] - &GT;名称:衬衫,描述:lorem ipsum,价格:10,指数:0
listItems中[ “鞋”] - GT;名称:鞋子,描述:lorem ipsum,价格:30,指数:0
所以代码就像:
var total: Int = 0
listItems.forEach {
total += parseInt(value.price)
}
但是我不明白如何访问此value
引用文档的V
答案 0 :(得分:15)
您传递给Entry<K, V>
的lambda接受value
,您可以使用此条目访问其listItems.forEach { total += parseInt(it.value.price) }
:
listItems.forEach { entry -> total += parseInt(entry.value.price) }
等同于此
listItems.forEach { (_, value) -> total += parseInt(value.price) }
或者,从Kotlin 1.1开始,您可以使用explicit lambda parameter:
val total = listItems.entries.sumBy { parseInt(it.value.price) }
如果您只需要对这些值求和,则可以使用destructuring in lambdas:
<outlook:calendar>
答案 1 :(得分:4)
对于某些集合,我建议使用forEach
或sumBy
,而不是使用fold
。
您可以通过调用value
上的Map<K,V>
来获取基础值。
所以要获得sum
你会做这样的事情:
val total = listItems.values.sumBy{ it.price.toInt() }
现在没有必要引入一个可变的var
。