Careeroza
zip, chunked and windowed
Combining and Splitting
Example
fun main() {
val names = listOf("Asha", "Ravi", "Kiran")
val scores = listOf(88, 92, 75)
println(names.zip(scores))
println(names.zip(scores) { n, s -> "$n=$s" })
val (n2, s2) = names.zip(scores).unzip()
println("$n2 $s2")
val ids = (1..7).toList()
println(ids.chunked(3)) // pages / batches
println(ids.windowed(3)) // sliding windows
println(ids.windowed(3, step = 2, partialWindows = true))
println(ids.zipWithNext { a, b -> b - a })
}Output
[(Asha, 88), (Ravi, 92), (Kiran, 75)] [Asha=88, Ravi=92, Kiran=75] [Asha, Ravi, Kiran] [88, 92, 75] [[1, 2, 3], [4, 5, 6], [7]] [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7]] [[1, 2, 3], [3, 4, 5], [5, 6, 7], [7]] [1, 1, 1, 1, 1, 1]
Moving Average with windowed
Example
Stock and fitness apps show a moving average to smooth out noise.
fun main() {
val dailySteps = listOf(4000, 8000, 6000, 10000, 2000, 9000, 7000)
val avg3 = dailySteps.windowed(3) { it.average().toInt() }
println("3-day average: $avg3")
val growth = dailySteps.zipWithNext { a, b -> if (b > a) "up" else "down" }
println(growth)
}Output
3-day average: [6000, 8000, 6000, 7000, 6000] [up, down, up, down, up, down]
Exercise
Exercise: Given val words = listOf("kotlin", "java", "kotlin", "swift", "java", "kotlin"), print each word with its count, most frequent first.
Show answer
fun main() {
val words = listOf("kotlin", "java", "kotlin", "swift", "java", "kotlin")
words.groupingBy { it }.eachCount()
.entries.sortedByDescending { it.value }
.forEach { (w, c) -> println("$w: $c") }
}