我有5个观察者说
Observable<String> obs1 = getObs1();
Observable<String> obs2 = getObs2();
Observable<String> obs3 = getObs3();
Observable<String> obs4 = getObs4();
Observable<String> obs5 = getObs5();
getObsX()
的实施是通过RxNetty进行网络呼叫。
由于所有都是独立呼叫,我需要同时启动它们。
完成obs1
和obs2
后,我需要开始调用getObs6()
,这取决于obs1
和obs2
。我可以做这样的事情。
Observable.zip(obs1, obs2, (obs1, obs2) -> {
return getObs6()
})
;
获得obs6
后,我需要使用obs1
,obs2
,obs3
,obs4
,obs5
和{{1获取obs6
。
那么如何订阅obs7
两次,一次获得obs1
和另一次
答案 0 :(得分:0)
对不起,我不是Java开发人员所以我会在c#中给你答案 - 我希望没问题。
这就像这样简单:
var query =
from i1 in getObs1()
from i2 in getObs2()
from i3 in getObs3()
from i4 in getObs4()
from i5 in getObs5()
from i6 in getObs6(i1, i2)
from i7 in getObs7(i1, i2, i3, i4, i5, i6)
select i7;
我使用以下代码对此进行了测试:
IObservable<int> getObs1() => Observable.Return(1);
IObservable<int> getObs2() => Observable.Return(2);
IObservable<int> getObs3() => Observable.Return(3);
IObservable<int> getObs4() => Observable.Return(4);
IObservable<int> getObs5() => Observable.Return(5);
IObservable<int> getObs6(int x, int y) => Observable.Return(x * y);
IObservable<int> getObs7(params int[] x) => Observable.Return(x.Aggregate((j, k) => j * k));
我得到了240
的正确答案。