0
点赞
收藏
分享

微信扫一扫

Scala - 翻转 Map

上古神龙 2022-02-18 阅读 62

一.引言

构建 key-value 的 map 时有时也需要同时构建 value-key 的 map,所以需要翻转原始的 key-value map,记录一下几种方法。

    val infoMap = Map("1" -> "A", "2" -> "B", "3" -> "C", "4" -> "A")

二.翻转 Map

1.For + Yield

    val reverseMapV1 = for ((key, value) <- infoMap) yield (value, key)
    Map(A -> 4, B -> 2, C -> 3)

for + yield 可以循环生成元素,不过 yield 平常使用场景不多,可以参考 Yield 常用语法

2.Values + KeySet

    val reverseMapV2 = infoMap.values.zip(infoMap.keySet).toMap
    Map(A -> 4, B -> 2, C -> 3)

key-value 转换为 value-key 再 toMap

3.Map

    val reverseMapV3 = infoMap.map(kv => {
      (kv._2, kv._1)
    })
    Map(A -> 4, B -> 2, C -> 3)

和方法二思路类似

Tips:

A.原始 map 中可能存在不同 key 相同 value 的情况,翻转后会造成一个 value 两个 key,此时保存排序靠后的一对 value-key。

B.上述方法得到的 map 均为不可变 map 无法再添加新值,如果需要转换为可变 map 可以执行:

    val immu2mu = scala.collection.mutable.HashMap(immutableMap.toSeq:_*)
举报

相关推荐

0 条评论