Scala 2.8 и виды на карту - PullRequest
2 голосов
/ 16 июля 2010

В 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

Это похоже на значительную потерю функциональности, и поэтому я предполагаю, что она где-то скрывается в библиотеке коллекций.У кого-нибудь есть идеи?

Edit - тупо предположил, что mapValues ​​точно такой же, как и у старой mapElements

1 Ответ

7 голосов
/ 16 июля 2010

Удивительно, но 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
...