使用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( ... );