我有一个 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/