scala - 如何将 Map[String,Seq[String]] 转换为 Map[String,String]

标签 scala

我有一个 Map[String,Seq[String]] 并且想基本上将它转换为 Map[String,String] 因为我知道序列只有一个值。

最佳答案

其他人已经提到mapValues ,但如果我是你,我会这样做:

scala> val m = Map(1 -> Seq(1), 2 -> Seq(2))
m: scala.collection.immutable.Map[Int,Seq[Int]] = Map(1 -> List(1), 2 -> List(2))

scala> m.map { case (k,Seq(v)) => (k,v) }
res0: scala.collection.immutable.Map[Int,Int] = Map(1 -> 1, 2 -> 2)

两个原因:
  • mapValues方法生成结果 Map 的 View ,这意味着每次访问元素时都会重新计算该函数。除非您计划只访问每个元素一次,或者您只计划访问其中的一小部分,否则您不希望重新计算发生。
  • (k,Seq(v)) 一起使用案例确保如果函数看到不完全包含一个元素的 Seq 将抛出异常。使用 _(0)_.head如果有零个元素,将抛出异常,但如果您有多个元素,则不会提示,这可能会导致稍后在没有错误的情况下丢失的东西时出现神秘的错误。
  • 关于scala - 如何将 Map[String,Seq[String]] 转换为 Map[String,String],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12482036/

    相关文章:

    Scala关闭 Hook 永远不会运行?

    scala - Spark 的 RDD.map() 不会执行,除非 RDD 内的项被访问

    用于推导和 flatMap/ map 中间结果的 Scala

    scala - Slick Repo 方法都参与一个服务的事务

    scala - Spark utf 8错误,非英文数据变成 `??????????`

    scala - 在 Scala 中选择正确的异常处理

    scala - 使用 Spark 列出 Hadoop HDFS 目录中的所有文件?

    scala - 如何产生多个值?

    scala - Akka:什么时候可以安全地发送消息

    scala - 巧妙处理 Spark RDD 中的 Option[T]