kotlin flow flatMapLatest使用示例
时间: 2024-02-05 22:02:43 浏览: 150
当然,我完全明白您的要求。关于您的问题,我可以为您提供以下Kotlin Flow flatMapLatest的示例代码:
```kotlin
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.runBlocking
fun main() = runBlocking<Unit> {
val numFlow = flowOf(1, 2, 3, 4, 5).onEach { delay(100) }
val strFlow = flowOf("one", "two", "three", "four", "five").onEach { delay(200) }
val result = numFlow.flatMapLatest { num ->
strFlow.map { str -> "$num:$str" }.onEach { delay(50) }
}
result.collect { println(it) } // will print "1:five 2:five 3:five 4:five 5:five"
delay(1000)
}
```
在这个示例中,我们先定义了两个Flow:`numFlow`和`strFlow`。`numFlow`是一个发射数字1到5的Flow,每个数字发射间隔100毫秒。`strFlow`是一个发射字符串"one"到"five"的Flow,每个字符串发射间隔200毫秒。
然后我们使用`flatMapLatest`操作符将这两个Flow组合起来。对于`numFlow`中的每个数字,我们都会创建一个新的Flow,每个新的Flow都会与`strFlow`组合在一起,生成一个新的字符串。在每个新的Flow中,我们都会等待50毫秒,再发射生成的字符串。
最终,`result` Flow中会发射最新的字符串,也就是`strFlow`中最后一个字符串和`numFlow`中最后一个数字组合生成的字符串。在我们的示例中,这个字符串是"5:five"。最后我们等待1秒钟,确保所有的字符串都被发射出来,并输出最终结果。
希望这个示例可以帮助您理解`flatMapLatest`的使用方法。如果您还有其他问题,请随时问我。
阅读全文