Преобразование изменяемого к неизменной карте

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

Как преобразовывают его в неизменный?

71
задан Eugene Yokota 15 December 2010 в 22:41
поделиться

2 ответа

Неизменяемая иерархия не содержит 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: _*
)
66
ответ дан 24 November 2019 в 13:04
поделиться
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"
                ^
28
ответ дан 24 November 2019 в 13:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: