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

factor
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)
  }
}
  1. 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
  1. 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
  1. 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