Keep values that match a predicate.

filter `filter` returns the values that pass a boolean test.

Collection Filter

minimum
CollectionFilter.kt
Replay: real traced execution (multi-file project)
fun main() {
    val minimum = 4
    val values = listOf(1, 3, 5, 7)
    val kept = values.filter { value -> value >= minimum }
    val joined = kept.joinToString("-")
    val count = kept.size

    println("joined=$joined")
    println("count=$count")
}
fun main() {
    val minimum = 2
    val values = listOf(1, 3, 5, 7)
    val kept = values.filter { value -> value >= minimum }
    val joined = kept.joinToString("-")
    val count = kept.size

    println("joined=$joined")
    println("count=$count")
}
fun main() {
    val minimum = 6
    val values = listOf(1, 3, 5, 7)
    val kept = values.filter { value -> value >= minimum }
    val joined = kept.joinToString("-")
    val count = kept.size

    println("joined=$joined")
    println("count=$count")
}
  1. minimum ← 4, values ← [1, 3, 5, 7], kept ← [5, 7], joined ← 5-7

    1fun main() {2    val minimum→ 4 = 4 //@minimum=2, 63    val values→ [1, 3, 5, 7] = listOf(1, 3, 5, 7)4    val kept→ [5, 7] = values[1, 3, 5, 7].filter { value -> value >= minimum }5    val joined→ 5-7 = kept[5, 7].joinToString("-")6    val count→ 2 = kept.size278    println("joined=$joined5-7")9    println("count=$count2")10}
    outputjoined=5-7
    count=2
  1. minimum ← 2, values ← [1, 3, 5, 7], kept ← [3, 5, 7], joined ← 3-5-7

    1fun main() {2    val minimum→ 2 = 23    val values→ [1, 3, 5, 7] = listOf(1, 3, 5, 7)4    val kept→ [3, 5, 7] = values[1, 3, 5, 7].filter { value -> value >= minimum }5    val joined→ 3-5-7 = kept[3, 5, 7].joinToString("-")6    val count→ 3 = kept.size378    println("joined=$joined3-5-7")9    println("count=$count3")10}
    outputjoined=3-5-7
    count=3
  1. minimum ← 6, values ← [1, 3, 5, 7], kept ← [7], joined ← 7, count ← 1

    1fun main() {2    val minimum→ 6 = 63    val values→ [1, 3, 5, 7] = listOf(1, 3, 5, 7)4    val kept→ [7] = values[1, 3, 5, 7].filter { value -> value >= minimum }5    val joined→ 7 = kept[7].joinToString("-")6    val count→ 1 = kept.size178    println("joined=$joined7")9    println("count=$count1")10}
    outputjoined=7
    count=1

Keep Values at the Minimum

  1. values starts as 1, 3, 5, and 7.
  2. minimum is 4.
  3. filter keeps values at least 4.
  4. joinToString("-") prints kept values as 5-7. | Value | >= 4? | Action | | --- | --- | --- | | 1 | no | drop | | 3 | no | drop | | 5 | yes | keep | | 7 | yes | keep |

Exercise: CollectionFilter.kt

Filter values at or above a minimum, join the kept values, and print the count