可变MultiMap到不可变Map

Mal*_*off 4 scala map set immutability multimap

我创造了一个 MultiMap

val ms =
  new collection.mutable.HashMap[String, collection.mutable.Set[String]]()
  with collection.mutable.MultiMap[String, String]
Run Code Online (Sandbox Code Playgroud)

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

ms.toMap[String, Set[String]]
Run Code Online (Sandbox Code Playgroud)

产量

Cannot prove that (String, scala.collection.mutable.Set[String]) <:< (String, Set[String]).
Run Code Online (Sandbox Code Playgroud)

这可以解决而无需手动迭代ms并将所有条目插入到新的不可变映射中吗?

ped*_*rla 5

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

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

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

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