首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将Map[String,Seq[String]]转换为Map[String,String]

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

Stack Overflow用户
提问于 2012-09-19 01:27:55
回答 4查看 2.6K关注 0票数 4

我有一个映射[ String,SeqString],我想把它基本上转换成一个MapString,String,因为我知道这个序列只有一个值。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-19 01:53:24

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

代码语言:javascript
运行
复制
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)

有两个原因:

  1. mapValues方法生成结果映射的视图,这意味着每次访问元素时都会重新计算函数。除非您计划只访问每个元素一次,或者只计划访问其中的一小部分,否则您不希望发生这种重新计算。
  2. 将case与(k,Seq(v))一起使用可以确保,如果函数发现某个Seq不包含恰好一个元素,就会抛出异常。如果有零个元素,使用_(0)_.head将抛出异常,但如果您有多个元素,则不会抱怨,这可能会在以后没有错误地丢失内容时导致神秘的错误。
票数 4
EN

Stack Overflow用户

发布于 2012-09-19 01:36:52

您可以使用mapValues()

代码语言:javascript
运行
复制
scala> Map("a" -> Seq("aaa"), "b" -> Seq("bbb"))
res0: scala.collection.immutable.Map[java.lang.String,Seq[java.lang.String]] = M
ap(a -> List(aaa), b -> List(bbb))

scala> res0.mapValues(_(0))
res1: scala.collection.immutable.Map[java.lang.String,java.lang.String] = Map(a
-> aaa, b -> bbb)
票数 3
EN

Stack Overflow用户

发布于 2012-09-19 01:36:11

我想我是通过执行以下操作获得的:

代码语言:javascript
运行
复制
mymap.flatMap(x => Map(x._1 -> x._2.head))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12482036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档