如何将字符串转换为Map中的Seq [String]

时间:2012-01-18 17:57:44

标签: scala

我有Map[String,String]和第三方功能需要Map[String,Seq[String]] 有没有一种简单的方法来转换它,所以我可以将地图传递给函数?

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:2)

使用Scalaz中的:->可以避免一些代码重复。

如果tTuple2,则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))