2015-03-23 11 views
30

Ich bin neu bei rxjava. Ich muss zwei Observables kombinieren, die Objekte unterschiedlichen Typs aussenden. Etwas wie Observable<Milk> und Observable<Cereals> und erhalten Sie eine Observable<CerealsWithMilk>. Ich konnte für so etwas keinen Operator finden. Was wäre die Art, so etwas zu tun? Beachten Sie, dass Milk und Cereals async sind.rxjava merge Observablen verschiedener Art

Antwort

47

Es ist schwer zu sagen, ohne genau zu wissen, was Sie brauchen, aber möglicherweise zip() oder combineLatest().

zip nehmen beide Observable<Milk> und Observable<Cereals> und lassen Sie sie in CerealsWithMilk über eine bereitgestellte Funktion kombinieren. Dies gibt eine neue CerealsWithMilk jedes Mal, wenn Sie erhalten sowohl ein Milkund ein Cereals.

combineLatest ist ähnlich zip außer es ein neues CerealsWithMilk auch wenn nur ein neues Milkoder nur ein neues Cereals emittiert wird, emittiert wird.

+2

Zip sieht genau so aus, was ich brauche. Vielen Dank! – Jelly

+1

Hinweis - (so lange jedes der Observablen mindestens ein Element ausgegeben hat). – LEO

2

Wenn Sie Observablen unterschiedlicher Art zusammenführen müssen Sie Observable.zip verwenden:

Observable<String> o1 = Observable.just("a", "b", "c"); 
Observable<Integer> o2 = Observable.just(1, 2, 3); 
Observable<String> result = Observable.zip(o1, o2, (a, b) -> a + b); 

result wird eine beobachtbare Erzeugen der Anwendung von (a, b) -> a + b-o1 ‚s und o2‘ s Elemente sein. Ergebnis in einer beobachtbaren Ausbeute "a1", "b2", "c3".

Verwandte Themen