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.

Author: Jelly, 2015-03-23

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.

 53
Author: Ross Hambrick,
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;
        }
 4
Author: Yuliia Ashomok,
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