我需要合并地图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 次 |
| 最近记录: |