在 2.7 中,我可以执行以下操作:
val lazyM: Map[_, _] = map.projection.mapElements(v => expCalc(v)) //MAP VIEW
我找不到在 2.8 中实现此功能的方法,实际上以地图结束:
val m: Map[_, _] = map.view.map(kv => kv._1 -> expCalc(kv._2)).toMap //STRICT
这似乎是功能的重大损失,因此我认为它隐藏在某个地方的集合库中。有人有什么想法吗?
编辑 - 愚蠢地我认为mapValues与旧mapElements完全相同
答案 0 :(得分:7)
有些令人惊讶的是,Map#mapValues
产生了一个(转换的)视图:
scala> Map(1 -> 2, 3 -> 4, 5 -> 6)
res0: scala.collection.immutable.Map[Int,Int] = Map((1,2), (3,4), (5,6))
scala> res0.mapValues { v => println("computing from " + v); v + 1 }
computing from 2
computing from 4
computing from 6
res1: scala.collection.immutable.Map[Int,Int] = Map((1,3), (3,5), (5,7))
scala> res1(1)
computing from 2
res2: Int = 3
scala> res1(5)
computing from 6
res3: Int = 7