似乎应该是一件简单的事情,但我暂时无法找到解决方案。因此,我有一些Single源返回不同的对象,并且我希望获得具有分组结果的Single。
查看示例:
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()
,但结果单一
答案 0 :(得分:0)
有Single.zip()
个运算符-您可以将多个Single
来源合并为一个。
如果该运营商不满足您的要求,则可以为每个Single
来源调用Single.toObservable()
并使用Observable.combineLatest()
答案 1 :(得分:0)
您要查找的是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页是获取有关不同操作员工作方式的动手视觉视角的有用资源。我鼓励您在那儿玩一会儿,以使您对任何您不太了解的事物有一种感觉,并发现一些您不知道的事物。 (在显示所有运算符时并不详尽,但是涵盖了很多常见的运算符。)