Как преобразовать строку в Seq [String] на карте - PullRequest
4 голосов
/ 18 января 2012

У меня есть Map[String,String] и сторонняя функция, которая требует Map[String,Seq[String]] Есть ли простой способ преобразовать это, чтобы я мог передать карту в функцию?

Ответы [ 2 ]

9 голосов
/ 18 января 2012
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 голосов
/ 19 января 2012

Вы можете избежать дублирования кода, используя :-> из 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...