将两张地图合并为一张

时间:2020-04-18 13:45:48

标签: kotlin

我必须要地图。一个是Map<String, Double>,例如“ USA,55.87”。第二个是Map<String, String>,例如“ USA,United States of America”。

我想将此地图转换为Map<Result, Double>。其中Result包含两个String,例如“ USA,United States of America”。该怎么做?

2 个答案:

答案 0 :(得分:2)

data class Result(
  val abbreviation: String,
  val name: String
)

fun main() {
  val firstMap = mapOf("USA" to 12.34, "CAN" to 56.78, "MEX" to 90.12)
  val secondMap = mapOf("USA" to "United States of America", "MEX" to "Mexico", "GON" to "Gondor")

  val result = firstMap.keys.intersect(secondMap.keys).associate { Result(it, secondMap[it]!!) to firstMap[it] }

  println(result)
}

firstMap.keys.intersect(secondMap.keys)将为您提供两个地图之间共有的一组键,以防某些键仅在一个地图中而不在另一个地图中。 associate()构建一个Map,在其中您将获得一个集合成员(在本例中为映射密钥),然后您返回一个Pair,代表所得Map中的一个条目。

答案 1 :(得分:0)

如果您有充分的理由相信两个地图中的键将始终匹配,则可以执行以下操作:

data class Country(
    val abbreviation: String,
    val name: String
)

fun main() {
    val firstMap = mapOf("USA" to 12.34)
    val secondMap = mapOf("USA" to "United States of America")

    print(firstMap.mapKeys { Country(it.key, secondMap[it.key] ?: error("Country ${it.key} not found in second map")) })
}