private[this]object MMMap extends HashMap[A, Set[B]] with MultiMap[A, B]
어떻게 불변으로 변환합니까?변경 가능 맵을 불변 맵으로 변환
private[this]object MMMap extends HashMap[A, Set[B]] with MultiMap[A, B]
어떻게 불변으로 변환합니까?변경 가능 맵을 불변 맵으로 변환
불변의 계층 구조는 Multimap과를 포함하지 않는, 그래서 당신은 같은 편리한 구문으로 변환 구조를 사용할 수 없습니다. 그러나 키/값 세트 쌍을 처리하게되어 행복하다면
을 원할 경우 012에서 2.83으로 x.toMap
을, 2.7에서 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: _*
)
스칼라 2.8 안정을 기다리는 참을성이 없다. – Jeriho
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"
^
당신은 스칼라 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
에 나는 추측 * 새로 만들 * 수 있습니까? 그냥 추측하지만 일반적으로 일은 이런 식으로 작동합니다. –
나는 무엇을 의미하는지 모르겠다. – Jeriho
흠 ..'MMMap.toMap'? –