Я новичок в rxjava. Мне нужно объединить два наблюдаемых, которые испускают объекты разного типа. Что-то вроде Observable<Milk>
и Observable<Cereals>
и получите Observable<CerealsWithMilk>
. Я не мог найти оператора для чего-то подобного. Каким был бы способ сделать что-то подобное? Обратите внимание, что Milk
и Cereals
являются асинхронными.
Rxjava слияние наблюдаемых различного типа
Ответ 1
Трудно сказать, не зная точно, что вам нужно, но возможно zip() или combLatest().
zip
будет принимать как Observable<Milk>
, так и Observable<Cereals>
и объединить их в CerealsWithMilk
через предоставленную функцию. Это генерирует новый CerealsWithMilk
каждый раз, когда вы получаете и a Milk
и a Cereals
.
combineLatest
похож на zip
, за исключением того, что он выдает новый CerealsWithMilk
, даже если просто новый Milk
или только новый Cereals
испускается.
Ответ 2
Если вы хотите объединить наблюдаемые данные различного типа, вам нужно использовать 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
будет наблюдаемым, генерирующим применение элементов (a, b) -> a + b
to o1
и o2
. В результате наблюдается наблюдаемый доход "a1", "b2", "c3"
.