如何将可变HashMap转换为Scala中的不可变等效项?

时间:2012-01-30 00:18:46

标签: scala immutability scala-collections mutable

在我的函数内部,我通过用数据填充新的可变HashMap来构造结果集(如果有更好的方法 - 我很感激评论)。然后我想将结果集作为不可变的HashMap返回。如何从变量中导出一个不可变的?

3 个答案:

答案 0 :(得分:12)

关于返回immutable.Mapimmutable.HashMap的讨论,尽管如此简单地使用toMap方法:

scala> val m = collection.mutable.HashMap(1 -> 2, 3 -> 4)
m: scala.collection.mutable.HashMap[Int,Int] = Map(3 -> 4, 1 -> 2)

scala> m.toMap
res22: scala.collection.immutable.Map[Int,Int] = Map(3 -> 4, 1 -> 2)

从2.9开始,这使用toMap中的方法TraversableOnce,其实现如下:

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
}

答案 1 :(得分:8)

scala> val m = collection.mutable.HashMap(1->2,3->4)
m: scala.collection.mutable.HashMap[Int,Int] = Map(3 -> 4, 1 -> 2)

scala> collection.immutable.HashMap() ++ m
res1: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2, 3 -> 4)

scala> collection.immutable.HashMap(m.toSeq:_*)
res2: scala.collection.immutable.HashMap[Int,Int] = Map(1 -> 2, 3 -> 4)

答案 2 :(得分:1)

如果您有地图:logMap: Map[String, String] 只需要这样做:logMap.toMap()