我需要合并地图mapA
和mapB
成对的"名称" - "电话号码"到最终地图中,将重复键的值粘在一起,用逗号分隔.重复值只应添加一次.在语言方法方面,我需要最惯用和最正确的方法.
例如:
val mapA = mapOf("Emergency" to "112", "Fire department" to "101", "Police" to "102")
val mapB = mapOf("Emergency" to "911", "Police" to "102")
Run Code Online (Sandbox Code Playgroud)
最终结果应如下所示:
{"Emergency" to "112, 911", "Fire department" to "101", "Police" to "102"}
Run Code Online (Sandbox Code Playgroud)
这是我的功能:
fun mergePhoneBooks(mapA: Map<String, String>, mapB: Map<String, String>): Map<String, String> {
val unionList: MutableMap <String, String> = mapA.toMutableMap()
unionList.forEach { (key, value) -> TODO() } // here's I can't come on with a beatiful solution
return unionList
}
Run Code Online (Sandbox Code Playgroud)
Wil*_*zel 10
您可以执行以下操作:
(mapA.keys + mapB.keys).associateWith {
setOf(mapA[it], mapB[it]).filterNotNull().joinToString()
}
Run Code Online (Sandbox Code Playgroud)
joinToString()
。怎么样:
val unionList = (mapA.asSequence() + mapB.asSequence())
.distinct()
.groupBy({ it.key }, { it.value })
.mapValues { (_, values) -> values.joinToString(",") }
Run Code Online (Sandbox Code Playgroud)
结果:
{Emergency=112,911, Fire department=101, Police=102}
Run Code Online (Sandbox Code Playgroud)
这将:
Sequence
两个地图的键值对的延迟Map<String, List<String>
)Map<String, String>
) 归档时间: |
|
查看次数: |
5382 次 |
最近记录: |