Combine filter, sort, and take in one pipeline.

chained-ops Sequence methods chain together: filter narrows the elements, sorted orders them, and take keeps a bounded prefix, all returning new sequences.

Chained Transformations

limit
ChainedOps.scala
Replay: real traced execution (multi-file project)
object Main {
  def main(args: Array[String]): Unit = {
    val limit = 2
    val nums = List(5, 3, 8, 1, 9, 2)
    val result = nums.filter(n => n > limit).sorted.take(3)

    println("count=" + result.length)
    println("result=" + result.mkString(","))
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val limit = 1
    val nums = List(5, 3, 8, 1, 9, 2)
    val result = nums.filter(n => n > limit).sorted.take(3)

    println("count=" + result.length)
    println("result=" + result.mkString(","))
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val limit = 3
    val nums = List(5, 3, 8, 1, 9, 2)
    val result = nums.filter(n => n > limit).sorted.take(3)

    println("count=" + result.length)
    println("result=" + result.mkString(","))
  }
}
  1. limit ← 2, nums ← List(5, 3, 8, 1, 9, 2), result ← List(3, 5, 8)

    1object Main {2  def main(args: Array[String]): Unit = {3    val limit→ 2 = 2 //@limit=1, 34    val nums→ List(5, 3, 8, 1, 9, 2) = List(5, 3, 8, 1, 9, 2)5    val result→ List(3, 5, 8) = numsList(5, 3, 8, 1, 9, 2).filter(n => n > limit).sorted.take(3)67    println("count=" + result.length3)8    println("result=" + resultList(3, 5, 8).mkString(","))9  }10}
    outputcount=3
    result=3,5,8
  1. limit ← 1, nums ← List(5, 3, 8, 1, 9, 2), result ← List(2, 3, 5)

    1object Main {2  def main(args: Array[String]): Unit = {3    val limit→ 1 = 14    val nums→ List(5, 3, 8, 1, 9, 2) = List(5, 3, 8, 1, 9, 2)5    val result→ List(2, 3, 5) = numsList(5, 3, 8, 1, 9, 2).filter(n => n > limit).sorted.take(3)67    println("count=" + result.length3)8    println("result=" + resultList(2, 3, 5).mkString(","))9  }10}
    outputcount=3
    result=2,3,5
  1. limit ← 3, nums ← List(5, 3, 8, 1, 9, 2), result ← List(5, 8, 9)

    1object Main {2  def main(args: Array[String]): Unit = {3    val limit→ 3 = 34    val nums→ List(5, 3, 8, 1, 9, 2) = List(5, 3, 8, 1, 9, 2)5    val result→ List(5, 8, 9) = numsList(5, 3, 8, 1, 9, 2).filter(n => n > limit).sorted.take(3)67    println("count=" + result.length3)8    println("result=" + resultList(5, 8, 9).mkString(","))9  }10}
    outputcount=3
    result=5,8,9