开发lambda表达式

时间:2017-11-28 18:02:48

标签: kotlin

var t = 0
fun sumIntMap(hm: HashMap<Int,Int>) = hm.forEach{ x -> t+=x.value 
}.let { t }

尝试使用函数对Hashmap Int值进行求和,我似乎无法对其进行优化,因此无需捕获并需要temp var(t)。

如何在lambdas中使用临时变量并返回它们?我是如何编写它的唯一真实方式(使用let来返回temp var)?

谢谢!

1 个答案:

答案 0 :(得分:4)

您可以将HashMap条目映射到其值以获取Ints列表,然后对该列表中的值求和:

hm.map { it.value }.sum()

如果您使用List而不是Map,则还可以使用foldreduce对原始代码执行类似操作:

hm.toList().fold(0, { acc, pair -> acc + pair.second })