private[this]object MMMap extends HashMap[A, Set[B]] with MultiMap[A, B]
Comment le convertir en immuable?
La hiérarchie immuable ne contient pas de MultiMap, vous ne pourrez donc pas utiliser la structure convertie avec la même syntaxe pratique. Mais si vous êtes heureux de traiter avec des paires clé/jeu de valeurs, alors:
Si vous voulez juste un HashMap
modifiable, vous pouvez simplement utiliser x.toMap
En 2.8 ou collection.immutable.Map(x.toList: _*)
en 2.7.
Mais si vous voulez que toute la structure soit immuable - y compris l'ensemble sous-jacent! - alors vous devez faire plus: vous devez convertir les ensembles en cours de route. En 2.8:
x.map(kv => (kv._1,kv._2.toSet)).toMap
En 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"
^
Vous pouvez utiliser myMap.toMap
pour convertir une carte mutable en immuable dans Scala 2.8 et versions ultérieures.
En regardant la définition de toMap
à partir de la documentation:
def toMap[T, U](implicit ev: A <:< (T, U)): immutable.Map[T, U] = {
val b = immutable.Map.newBuilder[T, U]
for (x <- self) b += x
b.result
}
Vous pouvez simplement accéder aux éléments suivants
val imm_map = MMMap.toMap