private[this]object MMMap extends HashMap[A, Set[B]] with MultiMap[A, B]
如何将其转换为不可变的?
private[this]object MMMap extends HashMap[A, Set[B]] with MultiMap[A, B]
如何将其转换为不可变的?
MMMap.toMap
?
Answers:
不可变的层次结构不包含MultiMap,因此您将无法以相同的方便语法使用转换后的结构。但是,如果您乐于处理键/值对,则:
如果只想可变HashMap
,则可以x.toMap
在2.8或collection.immutable.Map(x.toList: _*)
2.7中使用。
但是,如果您希望整个结构是不可变的-包括基础集合!-那么您必须做更多的事情:您需要沿途转换这些集合。在2.8版中:
x.map(kv => (kv._1,kv._2.toSet)).toMap
在2.7版中:
collection.immutable.Map(
x.map(kv => (kv._1,collection.immutable.Set(kv._2.toList: _*))).toList: _*
)
scala> val mutableMap = new HashMap[Int, String]
mutableMap: scala.collection.mutable.HashMap[Int,String] = Map()
scala> mutableMap += 1 -> "a"
res5: mutableMap.type = Map((1,a))
scala> mutableMap
res6: scala.collection.mutable.HashMap[Int,String] = Map((1,a))
scala> val immutableMap = mutableMap.toMap
immutableMap: scala.collection.immutable.Map[Int,String] = Map((1,a))
scala> immutableMap += 2 -> "b"
<console>:11: error: reassignment to val
immutableMap += 2 -> "b"
^