Kotlin中如何合并Map?求优雅实现方案(新手求助)
Kotlin合并多个Map的优雅实现
首先纠正代码里的一个小细节:Kotlin中整数类型是大写的Int,不是小写的int,所以foo和bar的方法签名应该修正为Map<String, Int>。
针对你的需求,这里有几种优雅的方式可以把List<Map<String, Int>>合并成一个单独的Map,然后调用bar:
方式一:使用fold累积合并(推荐)
fold是处理累积操作的标准函数,我们可以从空Map开始,逐个合并每个foo返回的小Map:
li.map { foo(it) } .fold(emptyMap<String, Int>()) { accumulated, current -> accumulated + current } .let { bar(it) }
如果想更高效,可以省略中间的map步骤,直接在fold里调用foo:
li.fold(emptyMap<String, Int>()) { acc, s -> acc + foo(s) } .let { bar(it) }
方式二:用flatMap展开键值对再转Map
这个思路是先把所有小Map的键值对都提取出来拼成一个列表,再将列表转为Map:
li.flatMap { foo(it).entries } .toMap() .let { bar(it) }
以上两种方式最终都会生成mapOf("A" to 1, "B" to 2, "C" to 3),满足调用bar的要求,且不需要修改foo或bar函数。
内容的提问来源于stack exchange,提问作者Ali-Ibrahim
相关产品推荐
相关产品推荐

