RxJava:如何用依赖关系编写多个可观察量,并在最后收集所有结果?
我正在学习RxJava,并且作为我的第一个实验,尝试重写此代码中的第一种方法中的代码(在Netflix的博客上引用为RxJava可以帮助解决的问题),以使用RxJava提高其异步性,即这样它就不会等待第一个Future()的结果,然后再继续阅读其余的代码。run()
f1.get()
f3
取决于。我看到如何处理这个,似乎做了诀窍:f1
flatMap
Observable<String> f3Observable = Observable.from(executor.submit(new CallToRemoteServiceA()))
.flatMap(new Func1<String, Observable<String>>() {
@Override
public Observable<String> call(String s) {
return Observable.from(executor.submit(new CallToRemoteServiceC(s)));
}
});
接下来,并依赖于 .我有这个:f4
f5
f2
final Observable<Integer> f4And5Observable = Observable.from(executor.submit(new CallToRemoteServiceB()))
.flatMap(new Func1<Integer, Observable<Integer>>() {
@Override
public Observable<Integer> call(Integer i) {
Observable<Integer> f4Observable = Observable.from(executor.submit(new CallToRemoteServiceD(i)));
Observable<Integer> f5Observable = Observable.from(executor.submit(new CallToRemoteServiceE(i)));
return Observable.merge(f4Observable, f5Observable);
}
});
这开始变得奇怪(他们可能不是我想要的......),但允许我在最后这样做,而不是我想要的:merge
f3Observable.subscribe(new Action1<String>() {
@Override
public void call(String s) {
System.out.println("Observed from f3: " + s);
f4And5Observable.subscribe(new Action1<Integer>() {
@Override
public void call(Integer i) {
System.out.println("Observed from f4 and f5: " + i);
}
});
}
});
这给了我:
Observed from f3: responseB_responseA
Observed from f4 and f5: 140
Observed from f4 and f5: 5100
这是所有数字,但不幸的是,我在单独的调用中获得结果,所以我不能完全替换原始代码中的最终println:
System.out.println(f3.get() + " => " + (f4.get() * f5.get()));
我不明白如何在同一行上访问这两个返回值。我认为可能我在这里缺少一些函数式编程fu。我该怎么做?谢谢。