Kotlin mutableMap foreach

时间:2017-03-14 11:48:02

标签: kotlin

我的问题更多是要理解文档。它说:

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

2 个答案:

答案 0 :(得分:15)

您传递给Entry<K, V>的lambda接受value,您可以使用此条目访问其listItems.forEach { total += parseInt(it.value.price) }

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

使用APOC Procedures

等同于此
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)

对于某些集合,我建议使用forEachsumBy,而不是使用fold

您可以通过调用value上的Map<K,V>来获取基础值。 所以要获得sum你会做这样的事情:

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

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