我有一个KotlinFlow<String>
与事件名称,由另一个线程产生,但最终通过网络传入。
我想用它来控制事件循环,但是-作为Kotlin的新手-感觉我滥用了它:
val commands: SharedFlow<String> = ...
commands.takeWhile {
when (command) {
"foo" -> executeFoo()
"bar" -> executeBar()
// ...
}
command != "cancel"
}.collect {}
我看到takeWhile
是建立在collectWhile
上的,这是我真正想使用的,但它是internal
。有没有更好的方法来摆脱collect {}
,或者我完全偏离了轨道?
通常,将条件和操作分开会更简洁:
commands
.takeWhile { it != "cancel" }
.collect {
when (it) {
"foo" -> executeFoo()
"bar" -> executeBar()
// ...
}
}
这可能就是为什么collectWhile
是内部的。在常规代码中应该避免使用。