Je veux diviser mon observable comme quelque chose comme: p> est-il encore possible? P > p> si / else code> instruction
3 Réponses :
Dans Observable ne fonctionne pas de cette manière, vous devez penser que l'observable est comme un ruisseau, où vous pouvez vous retrouver avec des objets, les autres. Le plus proche si / sinon que vous trouverez dans Observables, vous utiliserez des groupesBy. P>
Ici, vous avez des exemples de pratique que j'ai expliqué comment fonctionne p>
Un moyen d'atteindre ce comportement consiste à abonner à vos données deux fois et à filtrer différemment:
Subscription subscriptionA = Observable.from(array) .filter(a -> condition(a)) .subscribe(...) // <-- do stuff for condition A Subscription subscriptionB = Observable.from(array) .filter(a -> complexCondition(a)) .subscribe(...) // <-- do stuff for condition B
pour développer sur La réponse de Ken , une autre option consiste à "Fourche" l'observable dans les deux branches, à l'aide de Opérateur de replay . Cela garantit que l'observable d'origine est appelée une seule fois. Ceci est utile s'il existe un certain traitement ou des effets secondaires coûteux dans la chaîne:
ConnectableObservable<A> connectable = Observable.fromArray() .replay(); connectable .filter(a -> condition(a)) .// <--- do stuff if condition returns true connectable.connect(); // do this after the first branch connectable .filter(a -> complexCondition(a)) // filter all elements(!) .// <--- do stuff if complex condition returns true connectable .// <- iterate all elements
Quel est le problème avec l'utilisation d'un
si code> instruction dans
doonnext () code>,
mappe code>, etc., etc.?
@nhaarman avec Doonnext Vous ne serez pas en mesure de traiter davantage les données filtrées de la manière du Rxjava.