Lambdas and Higher-Order Functions
Map and Filter
Use small lambdas to transform and select collection values.
map-filter
`map` transforms each item, while `filter` keeps only items that match a condition.
Map and Filter
MapFilter.kt
Replay: real traced execution (multi-file project)
fun main() {
val bonus = 1
val numbers = listOf(1, 2, 3)
val boosted = numbers.map { value ->
value + bonus
}
val selected = boosted.filter { value ->
value >= 3
}
val summary = selected.joinToString("-")
println("bonus=$bonus")
println("summary=$summary")
}
fun main() {
val bonus = 0
val numbers = listOf(1, 2, 3)
val boosted = numbers.map { value ->
value + bonus
}
val selected = boosted.filter { value ->
value >= 3
}
val summary = selected.joinToString("-")
println("bonus=$bonus")
println("summary=$summary")
}
fun main() {
val bonus = 3
val numbers = listOf(1, 2, 3)
val boosted = numbers.map { value ->
value + bonus
}
val selected = boosted.filter { value ->
value >= 3
}
val summary = selected.joinToString("-")
println("bonus=$bonus")
println("summary=$summary")
}
bonus ← 1, numbers ← [1, 2, 3], boosted ← [2, 3, 4], selected ← [3, 4]
1fun main() {2 val bonus→ 1 = 1 //@bonus=0, 33 val numbers→ [1, 2, 3] = listOf(1, 2, 3)4 val boosted→ [2, 3, 4] = numbers[1, 2, 3].map { value ->5 value + bonus6 }7 val selected→ [3, 4] = boosted[2, 3, 4].filter { value ->8 value >= 39 }10 val summary→ 3-4 = selected[3, 4].joinToString("-")1112 println("bonus=$bonus1")13 println("summary=$summary3-4")14}outputbonus=1 summary=3-4
bonus ← 0, numbers ← [1, 2, 3], boosted ← [1, 2, 3], selected ← [3]
1fun main() {2 val bonus→ 0 = 03 val numbers→ [1, 2, 3] = listOf(1, 2, 3)4 val boosted→ [1, 2, 3] = numbers[1, 2, 3].map { value ->5 value + bonus6 }7 val selected→ [3] = boosted[1, 2, 3].filter { value ->8 value >= 39 }10 val summary→ 3 = selected[3].joinToString("-")1112 println("bonus=$bonus0")13 println("summary=$summary3")14}outputbonus=0 summary=3
bonus ← 3, numbers ← [1, 2, 3], boosted ← [4, 5, 6], selected ← [4, 5, 6]
1fun main() {2 val bonus→ 3 = 33 val numbers→ [1, 2, 3] = listOf(1, 2, 3)4 val boosted→ [4, 5, 6] = numbers[1, 2, 3].map { value ->5 value + bonus6 }7 val selected→ [4, 5, 6] = boosted[4, 5, 6].filter { value ->8 value >= 39 }10 val summary→ 4-5-6 = selected[4, 5, 6].joinToString("-")1112 println("bonus=$bonus3")13 println("summary=$summary4-5-6")14}outputbonus=3 summary=4-5-6