如何使用 rx 将多个单个结果连接成一个具有分组结果的单个结果?



这似乎是一件简单的事情,但我暂时找不到解决方案。所以我有几个返回不同对象的单一来源,我想获得具有分组结果的单一来源。

请参阅示例:

val singleA = Single.just(true) 
val singleB = Single.just(20) 
val singleC = Single.just("text")
val singleABC = Single.groupSingles(singleA,singleB,singleC)
singleABC.subscribe { resultA: Boolean, resultB:Int, resultC:String ->  //do something  }

实际上,所有单身人士(A,B和C(都执行长期操作,我不想一个接一个地称呼他们,而是更相似。

类似于Observable.combineLatest()但结果单一

您要查找的是zip运算符。zip可用于关联来自多个来源的排放,并且具有仅在其每个潜在源排放时才排放的区别。所以。。。

  • 如果有两个源,则当两个源都发出时,zip将发出两个值。
  • 如果有三个源,则当所有三个源都发出时,zip将发出三个值。
  • 如果有四个源,
  • 当所有四个源都发出时,zip将发出四个值。
  • 。等
  • 如果任何源发出错误,将在下游触发onError

有了这种理解,您可以像这样将zip用于您的案例:

val singleA = Single.just(true)
val singleB = Single.just(20)
val singleC = Single.just("text")
val singleABC =
Single.zip(
singleA,
singleB,
singleC,
Function3 { resultA: Boolean, resultB: Int, resultC: String ->
// do something
}
)

(回想起来,你其实离得很近(

我发现 RxMarbles 页面是一个有用的资源,可以获取有关不同操作员如何工作的动手、视觉视角。 我鼓励你在那里玩一会儿,以培养对任何你不太理解的东西的感觉,并发现一些你不知道存在的东西。(它并不详尽地显示所有运算符,但它涵盖了许多常见的运算符(。

Single.zip()运算符 - 您可以将多个Single源合并为一个。

如果该运算符不满足您的要求,您可以为每个Single源调用Single.toObservable()并使用Observable.combineLatest()

相关内容

  • 没有找到相关文章

最新更新