Collections
Collection Filter
Keep values that match a predicate.
filter
`filter` returns the values that pass a boolean test.
Collection Filter
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")
}
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
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
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
valuesstarts as1,3,5, and7.minimumis4.filterkeeps values at least4.joinToString("-")prints kept values as5-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