使用RxJava来完成任务并合并结果

使用RxJava来完成任务并合并结果,java,concurrency,rx-java,rx-java2,Java,Concurrency,Rx Java,Rx Java2,我正在努力做到以下几点: A | | V Observable<B> /\ / \

我正在努力做到以下几点:

                           A
                           |
                           |
                           V
                     Observable<B>
                           /\
                          /  \
                         /    \
                        V      V
            Observable<C>       Observable<D>
                        \      /
                         \    /
                          V  V
                      Observable<E>
理想情况下,我应该在某个地方使用以下函数:

Observable<E> cd2e(C c, D d) {
    return Observable.just(new E());
}
可观察到的cd2e(C,D){
返回可观察的。just(新的E());
}
谢谢。

操作符以允许多个订阅的方式绑定单个可观察对象

return a2b(a)
        .subscribeOn(Schedulers.io())
        .publish( bObservable -> 
               Observable.zip( bObservable.map( b -> this::b2c ),
                               bObservable.map( b -> this::b2d ),
                               (c, d) -> combine( c, d ) )
        .subscribe( ... );
操作员绑定观察者链,以便可以进行多个订阅;在这种情况下,订阅被压缩在一起,将
C
D
类型组合成组合的
E
类型


然后,您可以自由添加
observeOn()
运算符,以便在所需的线程上完成计算。

谢谢,鲍勃。从你的例子来看,zip似乎可以做到这一点。但是在尝试了代码之后,它似乎没有发出任何东西。我应该应用“连接”操作符吗?正如这里所解释的-如果我使用
flatmap()
而不是
publish()
,它会工作!此外,在调用
flatmap()
之前,必须将
startWith()
向上游移动。
return a2b(a)
        .subscribeOn(Schedulers.io())
        .publish( bObservable -> 
               Observable.zip( bObservable.map( b -> this::b2c ),
                               bObservable.map( b -> this::b2d ),
                               (c, d) -> combine( c, d ) )
        .subscribe( ... );