2015-03-23 13 views
30

Sono nuovo di rxjava. Ho bisogno di combinare due osservabili che emettono oggetti di diverso tipo. Qualcosa di simile Observable<Milk> e Observable<Cereals> e ottenere un Observable<CerealsWithMilk>. Non sono riuscito a trovare nessun operatore per qualcosa di simile. Quale sarebbe il modo migliore per fare qualcosa del genere? Si noti che Milk e Cereals sono asincrone.rxjava fondono osservabili di diverso tipo

risposta

47

È difficile dire senza sapere esattamente ciò che è necessario, ma probabilmente zip() o combineLatest().

zip avrà sia Observable<Milk> e Observable<Cereals> e lasciare che li combinano in CerealsWithMilk tramite una funzione fornita. Questo emette un nuovo CerealsWithMilk ogni volta che ottieni sia a Milke a Cereals.

combineLatest è simile a zip tranne emetterà un nuovo CerealsWithMilk anche se solo un nuovo Milko solo un nuovo Cereals viene emessa.

+2

Zip sembra esattamente quello di cui ho bisogno. Grazie! – Jelly

+1

Nota: (a condizione che ciascuno dei valori osservabili di origine abbia emesso almeno un elemento). – LEO

2

Se si desidera unire osservabili di tipo diverso è necessario utilizzare Observable.zip:

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 sarà un osservabile generare l'applicazione di (a, b) -> a + b a o1 's e o2' s articoli. Risultante in un ottenibile ottenibile "a1", "b2", "c3".

Problemi correlati