可变的多重映射到不可改变地图(Mutable MultiMap to immutable Map)

2019-09-19 05:41发布

我创建了一个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和插入所有条目到一个新的不可改变的地图吗?

Answer 1:

看来这个问题是可变的设定。 所以变成一成不变的作品集:

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

甚至按照丹尼尔索布拉尔更好的建议:

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


Answer 2:

如何使用mapValues更改Set一个人吗?



文章来源: Mutable MultiMap to immutable Map