如何以自定义方式合并2个可观察对象?

时间:2018-03-26 14:01:05

标签: rx-java2

定制时尚是: obs1 = [1, 3, 5, 7, 9]obs2 = [2, 4, 6, 8, 10] - > mergedObs = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

我在考虑obs1.zipWith(obs2)而我的双功能是(a, b) -> Observable.just(a, b)然后对我来说是不平凡的Observable<Observable<Integer>>

1 个答案:

答案 0 :(得分:3)

这看起来像是一个有序的合并:合并,以便当所有物品都准备就绪时从源中挑选最小的:

Flowables.orderedMerge()

  

给定固定数量的输入源(可以自我比较或给定Comparator)通过从每个源重复选择最小的输入源将它们合并为单个流,直到它们全部完成。

Flowables.orderedMerge(Flowable.just(1, 3, 5), Flowable.just(2, 4, 6))
.test()
.assertResult(1, 2, 3, 4, 5, 6);

修改

如果保证源的长度相同,您也可以zip将它们放入一个结构中,然后将其展平:

Observable.zip(source1, source2, (a, b) -> Arrays.asList(a, b))
.flatMapIterable(list -> list)
;