Подтвердить что ты не робот

Rxjava слияние наблюдаемых различного типа

Я новичок в rxjava. Мне нужно объединить два наблюдаемых, которые испускают объекты разного типа. Что-то вроде Observable<Milk> и Observable<Cereals> и получите Observable<CerealsWithMilk>. Я не мог найти оператора для чего-то подобного. Каким был бы способ сделать что-то подобное? Обратите внимание, что Milk и Cereals являются асинхронными.

4b9b3361

Ответ 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".