private[this]object MMMap extends HashMap[A, Set[B]] with MultiMap[A, B]
Как преобразовывают его в неизменный?
Неизменяемая иерархия не содержит 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"
^