質問

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

不変に変換する方法は?

役に立ちましたか?

解決

あなたは同じ便利な構文に変換された構造を使用することはできませんので、

不変の階層は、マルチマップが含まれていません。しかし、あなたは、その後、キー/値セットのペアに対処させていただきます場合:

あなただけの可変HashMapをしたい場合は、

、あなただけ2.7で2.8またはx.toMapcollection.immutable.Map(x.toList: _*)を使用することができます。

しかし、あなたは全体の構造は不変になりたい場合は - 基本的なセットを含む - あなたはもっとしなければならない:!あなたが道に沿ってセットを変換する必要があります。 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"
                ^

あなたはScalaの2.8以降のバージョンでは不変に可変マップを変換するmyMap.toMapを使用することができます。

ドキュメントからtoMapの定義を見てます:

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
}

することはできだけで、次へ

val imm_map = MMMap.toMap
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top