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

bonus
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")
}
  1. 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
  1. 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
  1. 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