rxjava fusionar observables de diferentes tipos
Soy nuevo en rxjava. Necesito combinar dos observables que emiten objetos de tipo diferente. Algo como Observable<Milk>
y Observable<Cereals>
y obtener un Observable<CerealsWithMilk>
. No pude encontrar ningún operador para algo como esto. ¿Cuál sería la forma de rx de hacer algo como esto? Tenga en cuenta que Milk
y Cereals
son asincrónicas.
2 answers
Es difícil de decir sin saber exactamente lo que necesita, pero posiblemente zip() o combineLatest().
zip
tomará Observable<Milk>
y Observable<Cereals>
y le permitirá combinarlos en CerealsWithMilk
a través de una función proporcionada. Esto emite un nuevo CerealsWithMilk
cada vez que obtiene get ambos a Milk
y a Cereals
.
combineLatest
es similar a zip
excepto que emitirá un nuevo CerealsWithMilk
incluso si solo un nuevo Milk
o solo se emite un nuevo Cereals
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-23 21:07:51
Si desea combinar observables de tipo diferente, debe usar 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
será un observable generando la aplicación de (a, b) -> a + b
a los elementos de o1
y o2
. Dando lugar a un rendimiento observable "a1", "b2", "c3"
.
Puede usar cualquier función. Por ejemplo
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) -> myFunc(a, b));
//...
private String myFunc(String a, Integer b) {
//your code here
return someString;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-18 11:36:21