Challenge - 5 Problems
Flow Combiner Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate2:00remaining
What is the output of this Kotlin flow zip example?
Consider the following Kotlin code using
zip on two flows. What will be printed?Kotlin
import kotlinx.coroutines.flow.* import kotlinx.coroutines.runBlocking fun main() = runBlocking { val flow1 = flowOf(1, 2, 3) val flow2 = flowOf("A", "B", "C", "D") flow1.zip(flow2) { a, b -> "$a$b" } .collect { println(it) } }
Attempts:
2 left
💡 Hint
Remember that zip pairs elements until one flow runs out.
✗ Incorrect
The zip operator pairs elements from both flows one by one. Since flow1 has 3 elements and flow2 has 4, the resulting flow emits 3 pairs. The extra element 'D' in flow2 is ignored.
❓ Predict Output
intermediate2:00remaining
What does this Kotlin flow combine example print?
Look at this Kotlin code using
combine on two flows. What will be the output?Kotlin
import kotlinx.coroutines.flow.* import kotlinx.coroutines.runBlocking import kotlinx.coroutines.delay fun main() = runBlocking { val flow1 = flow { emit(1) delay(100) emit(2) } val flow2 = flow { emit("A") delay(50) emit("B") } flow1.combine(flow2) { a, b -> "$a$b" } .collect { println(it) } }
Attempts:
2 left
💡 Hint
combine emits every time any flow emits, using the latest values from both.
✗ Incorrect
combine emits when either flow emits, using the latest values from both flows. The sequence is: both emit first values (1 and A) → 1A, then flow2 emits B (latest flow1 is 1) → 1B, then flow1 emits 2 (latest flow2 is B) → 2B.
🔧 Debug
advanced2:00remaining
Why does this Kotlin flow zip code cause a compilation error?
This Kotlin code tries to zip two flows but fails to compile. What is the cause?
Kotlin
import kotlinx.coroutines.flow.* import kotlinx.coroutines.runBlocking fun main() = runBlocking { val flow1 = flowOf(1, 2, 3) val flow2 = flowOf("A", "B", "C") val zipped = flow1.zip(flow2) { a, b -> a + b } zipped.collect { println(it) } }
Attempts:
2 left
💡 Hint
Check the types used in the lambda inside zip.
✗ Incorrect
The lambda tries to add an Int and a String using '+', which is not allowed in Kotlin. This causes a compilation error.
📝 Syntax
advanced2:00remaining
Which option correctly combines two flows with combine operator?
Select the Kotlin code snippet that correctly uses
combine to merge two flows of Int and String.Attempts:
2 left
💡 Hint
combine requires a lambda that returns a value combining both inputs.
✗ Incorrect
Option A correctly uses combine with a lambda that concatenates Int and String as a String. Option A tries to add Int and String with '+', which is invalid. Option A uses zip, not combine. Option A tries to multiply Int and String, invalid operation.
🚀 Application
expert2:00remaining
How many items are emitted by this zipped flow?
Given these two Kotlin flows, how many items will the zipped flow emit?
Kotlin
import kotlinx.coroutines.flow.* import kotlinx.coroutines.runBlocking fun main() = runBlocking { val flow1 = flow { emit(10) emit(20) emit(30) emit(40) } val flow2 = flow { emit("X") emit("Y") } val zipped = flow1.zip(flow2) { a, b -> "$a$b" } var count = 0 zipped.collect { count++ } println(count) }
Attempts:
2 left
💡 Hint
zip emits pairs until one flow runs out of elements.
✗ Incorrect
zip stops emitting when the shortest flow ends. flow1 emits 4 items, flow2 emits 2 items, so zipped emits 2 items.