可变MultiMap到不可变Map

时间:2012-07-08 21:36:18

标签: scala map set immutability multimap

我创建了一个MultiMap

val ms =
  new collection.mutable.HashMap[String, collection.mutable.Set[String]]()
  with collection.mutable.MultiMap[String, String]

,在填充条目之后,必须传递给期望Map[String, Set[String]]的函数。直接传递ms不起作用,并尝试通过toMap将其转换为不可变地图

ms.toMap[String, Set[String]]

产量

Cannot prove that (String, scala.collection.mutable.Set[String]) <:< (String, Set[String]).

如果不手动迭代ms并将所有条目插入到新的不可变映射中,是否可以解决这个问题?

2 个答案:

答案 0 :(得分:5)

似乎问题是可变的设置。所以变成不可变的集合起作用:

scala> (ms map { x=> (x._1,x._2.toSet) }).toMap[String, Set[String]]
res5: scala.collection.immutable.Map[String,Set[String]] = Map()

或者更好地遵循Daniel Sobral的建议:

scala> (ms mapValues { _.toSet }).toMap[String, Set[String]]
res7: scala.collection.immutable.Map[String,Set[String]] = Map()

答案 1 :(得分:2)

如何使用mapValues单独更改Set