1. ホーム
  2. scala

ミュータブルマップからイミュータブルマップに変換する

2023-07-31 19:59:22

質問

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

どのようにimmutableに変換するのですか?

どのように解決するのですか?

immutable階層はMultiMapを含まないので、変換後の構造を同じ便利な構文で使用することはできません。 しかし、キー/値集合のペアを扱うことに満足しているのであれば。

もし、単にミュータブルな HashMap が欲しいだけなら、単に x.toMap を使うか、あるいは、2.8 では collection.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: _*
)