Split Rx Observable dans de multiples flux et processus individuellement
Voici une photo de ce que je cherche à accomplir.
--a-b-c-a-bbb--un
divisé en
--a-----a-------a --> un flux
----b------bbb--- --> b flux
------c---------- --> c flux
Puis, être en mesure de
a.subscribe()
b.subscribe()
c.subscribe()
Jusqu'à présent, tout ce que j'ai trouvé a diviser le flux à l'aide d'un groupBy(), mais s'est ensuite effondrée tout remettre en un seul flux de données et de les traiter tous de la même fonction. Ce que je veux faire est de traiter chaque dérivés flux d'une manière différente.
La façon dont je suis en train de faire maintenant est de faire un tas de filtres. Est-il une meilleure façon de le faire?
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas à l'effondrement
Observables
degroupBy
. Vous pouvez au lieu de s'y abonner.Quelque chose comme ceci:
Si les états look un peu laid mais au moins, vous pouvez gérer chaque catégorie séparément. Peut-être il ya un moyen de les éviter.
if
consolidés.Dictionary<groupKey,action>
, et votre groupesubscribe
méthode aurait pour résoudre l'action du dictionnaire et de l'appeler.Dictionary<String, Action1<String>> handlers = new Hashtable<>(); handlers.put("a", s -> System.out.println("-a-"));....
et.subscribe((g) -> { Action1<String> action = handlers.get(g.getKey()); g.subscribe(action); });
filter
. Par curiosité, ce qui vous fait préférer cettegroupBy
solution à lafilter
un? Pour moifilter
semble plus simple, plus facile à comprendre, sans doute plus performants. Quels avantages voyez-vous dansgroupBy
?Facile comme bonjour, il suffit d'utiliser
filter
Un exemple en scala
Vous avez juste besoin de s'assurer que la source observable est chaud. Le plus simple est de
share
il.publish
au lieu deshare
et invoquerconnect
lorsque tous subsribers sont abonnés.share
. Le code fourni effectivement souscrit à trois reprises pour chaque abonné, même comme il le ferait sansshare
. La bonne façon de procéder est décrite dans Krzysztof Skyrzynecki commentaire: utiliserpublish
au lieu deshare
et invoquerconnect
lorsque tous subsribers sont abonnés.publish
+connect
méthode est plus propre et je voudrais l'utiliser chaque fois que possible (mais parfois, vous ne savez pas les abonnés à l'avance et ne se soucient pas que vous manquez de certains éléments). Cependant, je ne pense pas que votre déclaration au sujet de trois abonnements à l'origine de froido
est correct. Si vous pouvez prouver le contraire, veuillezshare()
🙂 votre preuve avec nous.