2017-06-28 4 views
1

I 5 Observablen haben sagenLatente beobachtbaren Anruf

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

Die Implementierung von getObsX() ist ein Netzanruf durch RxNetty zu tun.

Da alle unabhängigen Anrufe sind, muss ich sie gleichzeitig starten.

Nach Abschluss der obs1 und obs2, ich brauche Anruf getObs6() zu beginnen, die auf obs1 und obs2 abhängt. Ich kann so etwas tun.

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

; 

Sobald ich obs6 bekommen, dann brauche ich obs1 zu verwenden, obs2, obs3, obs4, obs5 und obs6 zu obs7 zu holen.

So wie kann ich abonnieren obs1 zweimal, einmal obs5 zu erhalten und eine andere

Antwort

0

Es tut mir leid, dass ich nicht ein Java-Entwickler bin so werde ich Ihnen die Antwort in C# geben - ich hoffe, dass in Ordnung ist.

Es ist so einfach, wie dies zu tun:

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; 

ich dies mit dem folgenden Code getestet:

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

ich die richtige Antwort von 240 bekam.