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
30
A
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 Milk
e a Cereals
.
combineLatest
è simile a zip
tranne emetterà un nuovo CerealsWithMilk
anche se solo un nuovo Milk
o solo un nuovo Cereals
viene emessa.
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"
.
Zip sembra esattamente quello di cui ho bisogno. Grazie! – Jelly
Nota: (a condizione che ciascuno dei valori osservabili di origine abbia emesso almeno un elemento). – LEO