【发布时间】:2022-01-10 01:26:53
【问题描述】:
当我们试图从 RxJ 迁移到 kotlin Flows 时,我真的很惊讶,因为没有任何工具可以压缩多个流。
val flow1= (1..3).asFlow().onEach {delay(1000)}
val flow2= (1..3).asFlow().onEach {delay(2000)}
val flow3= (1..3).asFlow().onEach {delay(3000)}
我一直在寻找 Rx 风格的 Flow.zip(flow1,flow2,flow3) 但是我没有找到任何这样的工具。
让我感到奇怪的是,我在堆栈或任何 Kotlin Flows 教程中都没有找到很多问题来询问我在问什么。
这让我觉得我一定是做错了什么,并且可能有一个替代工具来压缩多个流。
有什么提示吗?
【问题讨论】:
-
我猜鲍里斯你没有仔细阅读我的查询
-
也许是combine? (顶级函数)
-
您的意思是多于两个流吗?
zip函数 Boris 链接的功能与 Rx 的 zip 相同,尽管它仅适用于两个项目。当您说他们没有仔细阅读时,我不确定您的意思。combine做一些不同于压缩的事情。对于最慢源发出的每个项目,压缩仅发出一个组合项目。组合为任何源发出的每个项目发出一个组合项目,一旦它们都至少发出一次。 -
协程标准库包含一组最小的运算符,以符合反应式编程。我不知道他们是否打算稍后添加更详细的运算符,但他们表示当前的理念是在核心库中保持最小化。