我有Map[String,String]
和第三方函数需要Map[String,Seq[String]]
有没有简单的方法来转换这个,所以我可以将地图传递给函数?如何将字符串转换为地图中的Seq [字符串]
4
A
回答
9
original.mapValues(Seq(_))
注意mapValues
返回地图视图,因此函数(Seq(_)
)将每一个元件被访问的时间重新计算。为了避免这种情况,只需使用普通map
:
original.map{ case (k,v) => (k, Seq(v)) }
用法:
scala> val original = Map("a" -> "b", "c" -> "d")
original: scala.collection.immutable.Map[java.lang.String,java.lang.String] = Map(a -> b, c -> d)
scala> original.mapValues(Seq(_))
res1: scala.collection.immutable.Map[java.lang.String,Seq[java.lang.String]] = Map(a -> List(b), c -> List(d))
2
您可以通过使用:->
从Scalaz避免一些重复代码。
如果t
是Tuple2
,f <-: t :-> g
相当于(f(t._1), g(t._2))
。
scala> import scalaz._, Scalaz._
import scalaz._
import Scalaz._
scala> val m = Map(1 -> 'a, 2 -> 'b)
m: scala.collection.immutable.Map[Int,Symbol] = Map(1 -> 'a, 2 -> 'b)
scala> m.map(_ :-> Seq.singleton)
warning: there were 1 deprecation warnings; re-run with -deprecation for details
res15: scala.collection.immutable.Map[Int,Seq[Symbol]] = Map(1 -> List('a), 2 -> List('b))
scala> m.map(_ :-> (x => Seq(x)))
res16: scala.collection.immutable.Map[Int,Seq[Symbol]] = Map(1 -> List('a), 2 -> List('b))
感谢您的帮助! – chiappone 2012-01-18 18:44:58
+1关于视图评估语义的提示。 – missingfaktor 2012-01-18 20:08:56