Sequences and Lazy Views
Lazy Views
Transform through a view and force a small result.
lazy-view
A `view` delays work until the result is needed. Calling `toList` forces only the elements that are kept, here the first two scaled numbers.
Lazy Views
LazyView.scala
Replay: real traced execution (multi-file project)
object Main {
def main(args: Array[String]): Unit = {
val factor = 10
val nums = List(1, 2, 3, 4)
val scaled = nums.view.map(n => n * factor).take(2).toList
println("result=" + scaled.mkString(","))
println("count=" + scaled.length)
}
}
object Main {
def main(args: Array[String]): Unit = {
val factor = 2
val nums = List(1, 2, 3, 4)
val scaled = nums.view.map(n => n * factor).take(2).toList
println("result=" + scaled.mkString(","))
println("count=" + scaled.length)
}
}
object Main {
def main(args: Array[String]): Unit = {
val factor = 100
val nums = List(1, 2, 3, 4)
val scaled = nums.view.map(n => n * factor).take(2).toList
println("result=" + scaled.mkString(","))
println("count=" + scaled.length)
}
}
factor ← 10, nums ← List(1, 2, 3, 4), scaled ← List(10, 20)
1object Main {2 def main(args: Array[String]): Unit = {3 val factor→ 10 = 10 //@factor=2, 1004 val nums→ List(1, 2, 3, 4) = List(1, 2, 3, 4)5 val scaled→ List(10, 20) = nums.viewSeqView(<not computed>).map(n => n * factor).take(2).toList67 println("result=" + scaledList(10, 20).mkString(","))8 println("count=" + scaled.length2)9 }10}outputresult=10,20 count=2
factor ← 2, nums ← List(1, 2, 3, 4), scaled ← List(2, 4)
1object Main {2 def main(args: Array[String]): Unit = {3 val factor→ 2 = 24 val nums→ List(1, 2, 3, 4) = List(1, 2, 3, 4)5 val scaled→ List(2, 4) = nums.viewSeqView(<not computed>).map(n => n * factor).take(2).toList67 println("result=" + scaledList(2, 4).mkString(","))8 println("count=" + scaled.length2)9 }10}outputresult=2,4 count=2
factor ← 100, nums ← List(1, 2, 3, 4), scaled ← List(100, 200)
1object Main {2 def main(args: Array[String]): Unit = {3 val factor→ 100 = 1004 val nums→ List(1, 2, 3, 4) = List(1, 2, 3, 4)5 val scaled→ List(100, 200) = nums.viewSeqView(<not computed>).map(n => n * factor).take(2).toList67 println("result=" + scaledList(100, 200).mkString(","))8 println("count=" + scaled.length2)9 }10}outputresult=100,200 count=2