由于我没有很多关于你的项目和方法的具体实现的信息,即它们的参数和返回类型,我有两个假设。
注意:如果我使用 lambda 表达式,希望您不介意。
1)。方法返回 Observable<Object> 就像 Retrofit
在这种情况下,它们看起来像这样:
public Observable<Object> methodA(Object o){
return null;
}
public Observable<Object> methodB(Object o){
return null;
}
public Observable<Object> methodC(Object[] objects){
return null;
}
对于这种情况,您可以使用以下内容:
Object[] localDBObjects = new Object[10];
Observable.just(localDBObjects)
.flatMap(objects -> Observable.from(objects)
.flatMap(object -> methodA(object))
.flatMap(resultFromMethodA -> methodB(resultFromMethodA))
.toList())
.flatMap(listOfResultsFromMethodB -> methodC(listOfResultsFromMethodB.toArray(new Object[listOfResultsFromMethodB.size()])))
.subscribe(resultFromMethodC -> {
//do something
}, t -> t.printStackTrace());
2)。在其他情况下,方法返回 Object,如下所示:
public Object methodA(Object o){
return null;
}
public Object methodB(Object o){
return null;
}
public Object methodC(Object[] objects){
return null;
}
在这种情况下,您需要在某些地方将运算符 flatMap( ) 更改为 map( ):
Object[] localDBObjects = new Object[10];
Observable.just(localDBObjects)
.flatMap(objects -> Observable.from(objects)
.map(object -> methodA(object))
.map(resultFromMethodA -> methodB(resultFromMethodA))
.toList())
.map(listOfResultsFromMethodB -> methodC(listOfResultsFromMethodB.toArray(new Object[listOfResultsFromMethodB.size()])))
.subscribe(resultFromMethodC -> {
//do something
}, t -> t.printStackTrace());