Je suis nouveau sur rxjava. J'ai besoin de combiner deux observables qui émettent des objets de type différent. Quelque chose comme Observable<Milk>
et Observable<Cereals>
et obtenez un Observable<CerealsWithMilk>
. Je n'ai trouvé aucun opérateur pour quelque chose comme ça. Quelle serait la façon rx de faire quelque chose comme ça? Notez que Milk
et Cereals
sont asynchrones.
Il est difficile de dire sans savoir exactement ce dont vous avez besoin, mais peut-être Zip () ou combineLatest () .
Zip
prendra les deux Observable<Milk>
et Observable<Cereals>
et vous permet de les combiner en CerealsWithMilk
via une fonction fournie. Cela émet un nouveau CerealsWithMilk
à chaque fois que vous obtenez les deux un Milk
et un Cereals
.
combineLatest
est similaire à Zip
sauf qu'il émettra un nouveau CerealsWithMilk
même si juste un nouveau Milk
ou juste un nouveau Cereals
est émis.
Si vous souhaitez fusionner des observables de type différent, vous devez utiliser 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
sera un observable générant l'application de (a, b) -> a + b
aux éléments de o1
et de o2
. Il en résulte un rendement observable "a1", "b2", "c3"
.
Vous pouvez utiliser n'importe quelle fonction. Par exemple
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;
}