Keep only the elements that pass a test.

filter-list `filter` keeps each element for which the function returns true. The result is a shorter list, shown here by its length and joined text.

Filtering a List

limit
FilterList.scala
Replay: real traced execution (multi-file project)
object Main {
  def main(args: Array[String]): Unit = {
    val limit = 2
    val nums = List(1, 2, 3, 4)
    val kept = nums.filter(n => n > limit)
    val text = kept.mkString(",")

    println("count=" + kept.length)
    println("text=" + text)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val limit = 1
    val nums = List(1, 2, 3, 4)
    val kept = nums.filter(n => n > limit)
    val text = kept.mkString(",")

    println("count=" + kept.length)
    println("text=" + text)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val limit = 3
    val nums = List(1, 2, 3, 4)
    val kept = nums.filter(n => n > limit)
    val text = kept.mkString(",")

    println("count=" + kept.length)
    println("text=" + text)
  }
}
  1. limit ← 2, nums ← List(1, 2, 3, 4), kept ← List(3, 4), text ← 3,4

    1object Main {2  def main(args: Array[String]): Unit = {3    val limit→ 2 = 2 //@limit=1, 34    val nums→ List(1, 2, 3, 4) = List(1, 2, 3, 4)5    val kept→ List(3, 4) = numsList(1, 2, 3, 4).filter(n => n > limit)6    val text→ 3,4 = keptList(3, 4).mkString(",")78    println("count=" + kept.length2)9    println("text=" + text3,4)10  }11}
    outputcount=2
    text=3,4
  1. limit ← 1, nums ← List(1, 2, 3, 4), kept ← List(2, 3, 4), text ← 2,3,4

    1object Main {2  def main(args: Array[String]): Unit = {3    val limit→ 1 = 14    val nums→ List(1, 2, 3, 4) = List(1, 2, 3, 4)5    val kept→ List(2, 3, 4) = numsList(1, 2, 3, 4).filter(n => n > limit)6    val text→ 2,3,4 = keptList(2, 3, 4).mkString(",")78    println("count=" + kept.length3)9    println("text=" + text2,3,4)10  }11}
    outputcount=3
    text=2,3,4
  1. limit ← 3, nums ← List(1, 2, 3, 4), kept ← List(4), text ← 4

    1object Main {2  def main(args: Array[String]): Unit = {3    val limit→ 3 = 34    val nums→ List(1, 2, 3, 4) = List(1, 2, 3, 4)5    val kept→ List(4) = numsList(1, 2, 3, 4).filter(n => n > limit)6    val text→ 4 = keptList(4).mkString(",")78    println("count=" + kept.length1)9    println("text=" + text4)10  }11}
    outputcount=1
    text=4