7
votes

Rxjava filtre 'autre'

Je veux diviser mon observable comme si / else instruction

quelque chose comme: xxx

est-il encore possible?


2 commentaires

Quel est le problème avec l'utilisation d'un si instruction dans doonnext () , mappe , 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.


3 Réponses :


4
votes

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.

Ici, vous avez des exemples de pratique que j'ai expliqué comment fonctionne

https: // github.com/politrons/reactive/blob/master/src/test/java/rx/observables/transforming/observoudGroupby.java


0 commentaires

2
votes

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


0 commentaires

2
votes

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


0 commentaires