RXJava – Dividir y combinar un Observable

Soy nuevo en RxJava y necesito ayuda / orientación sobre cómo hacer lo siguiente:

Necesito obtener dos valores de un Observable

  • una cuerda
  • Una lista <.ObjectA>

Luego necesito aplicar dos filtros diferentes () en esta lista y finalmente combinarlos todos (String, FilteredListA, FilteredListB) en un único observable.

¿Hay una sola llamada encadenada que puedo utilizar ??? (ejemplo de la necesidad del groupBy quizá)

A continuación se muestra el código de ejemplo que está haciendo lo mismo.

MasterObject = String, List<.ObjectA> Observable<ReturnObject> getReturnObject() { Observable<MasterObject> masterObjectObservable = getMasterObjectObservable(); Observable<String> myStringbservable = masterObjectObservable.map(new Func1<MasterObject, String>() { @Override public String call(MasterObject masterObject) { return masterObject.getString(); } }); return masterObjectObservable.flatMap(new Func1<MasterObject, Observable<ObjectA>>() { @Override public Observable<MasterObject> call(MasterObject masterObject) { return Observable.from(masterObject.getList()); } }).filter(new Func1<ObjectA, Boolean>() { @Override public Boolean call(ObjectA objectA) { return objectA.isTrue(); } }).toList().concatWith(getSecondList(masterObjectObservable)).zipWith(publicKeyObservable, new Func2<List<ObjectA>, String, ReturnObject>() { @Override public ReturnObject call(List<ObjectA> listObjectA, String string) { return new ReturnObject(string, listObject); } }); } private Observable<List<ObjectA>> getSecondList(Observable<MasterObject> masterObject) { return masterObject.flatMap(new Func1<MasterObject, Observable<ObjectA>>() { @Override public Observable<ObjectA> call(MasterObject masterObject) { return Observable.from(masterObject.getList()); } }).filter(new Func1<ObjectA, Boolean>() { @Override public Boolean call(ObjectA objectA) { return objectA.isCondition(); } }).toSortedList(new Func2<ObjectA, ObjectA, Integer>() { @Override public Integer call(ObjectA a, ObjectA b) { return a.getCondition() .compareTo(b.getCondition()); } }); } 

    One Solution collect form web for “RXJava – Dividir y combinar un Observable”

    Aquí hay un ejemplo con groupBy :

     public class Multikind2 { static Observable<Object> getSource() { return Observable.just("String", Arrays.asList(1, 2, 3, 4)); } enum ValueKind { STRING, LIST } public static void main(String[] args) { Func1<Object, ValueKind> kindSelector = o -> { if (o instanceof String) { return ValueKind.STRING; } else if (o instanceof List) { return ValueKind.LIST; } throw new IllegalArgumentException("Unsupported value: "+ o); }; getSource() .groupBy(kindSelector) .flatMap(g -> { if (g.getKey() == ValueKind.STRING) { return g; } else if (g.getKey() == ValueKind.LIST) { Observable<Integer> flattened = g .flatMapIterable(v -> (Iterable<Integer>)v) .share(); Observable<Integer> filtered1 = flattened .filter(v -> v % 2 == 0); Observable<String> filtered2 = flattened .filter(v -> v % 2 != 0) .map(v -> "-> " + v); return filtered1.cast(Object.class) .mergeWith(filtered2).cast(Object.class); } return Observable.<Object>error( new IllegalArgumentException("Unsupported value kind: "+ g.getKey())); }).subscribe( System.out::println, Throwable::printStackTrace, () -> System.out.println("Done")); } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.