71 votes

Conversion de carte mutable en carte immuable

 private[this]object MMMap extends  HashMap[A, Set[B]] with MultiMap[A, B]
 

Comment le convertir en immuable?

66voto

Rex Kerr Points 94401

L'immuable hiérarchie ne contient pas une MultiMap, de sorte que vous ne serez pas en mesure d'utiliser des convertis de la structure avec la même pratique de la syntaxe. Mais si vous êtes heureux de traiter avec clé/valueset paires, puis:

Si vous voulez juste une mutable HashMap, vous pouvez simplement utiliser x.toMap à 2,8 collection.immutable.Map(x.toList: _*) 2,7.

Mais si vous voulez l'ensemble de la structure pour être immuable, y compris l'ensemble sous-jacent!--ensuite, vous devez faire plus: vous avez besoin de convertir les jeux le long du chemin. 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: _*
)

28voto

michael.kebe Points 5723
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"
                ^

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X