我必须创建一个执行流,其中必须执行一系列Observable,一些是并行的,另一些则等待执行并行执行。这些Observables操纵传递给其他人的数据。例如,Observable 2处理稍后必须由Observable 4使用的数据。
总之,流程应该是这样的:
时间------------------------->
并行执行某些可观察对象,等待执行终结的其他可观察对象,以及等待执行的其中一个或多个也可以并行执行。
我一直在尝试各种方式,创建Observable列表并在.zip中运行(在每个observable中使用.observeOn(Schedulers.computation())),我也尝试过.zipWith。但没有成功。
答案 0 :(得分:1)
我们假设你有这些方法:
Single<List<DataType1>> getData1()
Single<List<DataType2>> manipulateList2(List<DataType2> list2)
Single<List<DataType3>> getData3(List<DataType1> list1, List<DataType2> list2)
Single<List<DataType4>> manipulateList4(List<DataType3> list3)
Completable insertLog(List<DataType4> list4)
Single<List<ResultType>> createResult(List<DataType4> list4)
然后您可以根据需要组合这些
Single<List<ResultType>> result = Single.zip(
getData1().subscribeOn(Schedulers.io()),
manipulateList2(sourceList2).subscribeOn(Schedulers.computation()),
(list1, list2) -> getData3(list1, list2)
)
.flatMap(v -> v)
.flatMap(list3 -> manipulateList4(list3))
.flatMap(list4 ->
insertLog(list4).subscribeOn(Schedulers.io())
.andThen(createResult(list4).subscribeOn(Schedulers.computation()))
);
return result;
zip
允许同时运行同一个基本被动类型的多个来源,flatMap
充当延续,andThen
让你运行Completable
和{{1}一起。