我创建了一个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
并将所有条目插入到新的不可变映射中,是否可以解决这个问题?
答案 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
?