2017-06-28 3 views
1

私は5つの観測を持っているgetObsX()の実装はRxNettyを通じてネットワーク呼び出しを行うことです繰延観察可能なコール

Observable<String> obs1 = getObs1(); 
Observable<String> obs2 = getObs2(); 
Observable<String> obs3 = getObs3(); 
Observable<String> obs4 = getObs4(); 
Observable<String> obs5 = getObs5(); 

を言います。

すべては独立したコールなので、同時に開始する必要があります。 obs1obs2が完了する

、私はobs1obs2に依存コールgetObs6()を起動する必要があります。私はこのようなことをすることができます。

Observable.zip(obs1, obs2, (obs1, obs2) -> { 
     return getObs6() 
    }) 

; 

私はobs6を得れば、私はobs7をフェッチするobs1obs2obs3obs4obs5obs6を使用する必要があります。

それでは、どのように私はobs5と別の

答えて

0

を取得するために1回、2回obs1を購読することができます私はC#であなたに答えを与えるだろうので、私は、Java開発者じゃないことを申し訳ない - 私はそれはOKだ願っています。

それは、これを行うのと同じくらい簡単です:

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; 

私は次のコードでこれをテストした:私は240の正しい答えを得た

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));