반응형
변경 가능한 맵을 변경 불가능한 맵으로 변환
private[this]object MMMap extends HashMap[A, Set[B]] with MultiMap[A, B]
불변으로 변환하는 방법은 무엇입니까?
변경 불가능한 계층 구조는 MultiMap을 포함하지 않으므로 동일한 편리한 구문으로 변환 된 구조를 사용할 수 없습니다. 그러나 키 / 값 집합 쌍을 처리하는 데 만족한다면 다음을 수행하십시오.
변경 가능한을 원하면 2.8 또는 2.7에서 HashMap
사용할 수 있습니다 .x.toMap
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: _*
)
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"
^
myMap.toMap
Scala 2.8 및 이후 버전에서 변경 가능한 맵을 변경 불가능한 맵으로 변환하는 데 사용할 수 있습니다 .
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
참고 URL : https://stackoverflow.com/questions/2817055/converting-mutable-to-immutable-map
반응형
'Programing' 카테고리의 다른 글
create-react-app을 사용하는 React 앱에서 ES6 기능을 폴리 필하는 가장 좋은 방법 (0) | 2020.11.02 |
---|---|
iOS 11에서 암호 자동 채우기 액세서리보기 옵션을 비활성화 하시겠습니까? (0) | 2020.11.02 |
Markov 체인은 유한 상태 기계와 동일합니까? (0) | 2020.11.02 |
sprintf에 해당하는 C ++? (0) | 2020.11.02 |
sprintf에 해당하는 C ++? (0) | 2020.11.02 |