RxJava Peut-être

RxJava Peut-être

1. introduction

Dans ce didacticiel, nous allons examinerthe Maybe<T> type in RxJava – which represents a stream which can emit a single value, complete in an empty state or report an error.

2. Le typeMaybe

Maybe est un type spécial deObservable qui ne peut émettre que zéro ou un élément, et signaler une erreur si le calcul échoue à un moment donné.

À cet égard, c'est comme une union deSingle etCompletable. Tous ces types réduits, y comprisMaybe,, offrent un sous-ensemble des opérateursFlowable. Cela signifiewe can work with Maybe like a Flowable as long as the operation makes sense for 0 or 1 items.

Puisqu'il ne peut émettre qu'une seule valeur, il ne prend pas en charge la gestion de la contre-pression comme avec unFlowable:

Maybe.just(1)
  .map(x -> x + 7)
  .filter(x -> x > 0)
  .test()
  .assertResult(8);

Il existe des signauxonSuccess, onError etonComplete qui peuvent être souscrits à partir d'une sourceMaybe:

Maybe.just(1)
    .subscribe(
        x -> System.out.print("Emitted item: " + x),
        ex -> System.out.println("Error: " + ex.getMessage()),
        () -> System.out.println("Completed. No items.")
     );

Le code ci-dessus afficheraEmitted item: 1 car cette source émettra une valeur de succès.

Pour les mêmes abonnements:

  • Maybe.empty().subscribe(…) imprimera“Completed. No items.”

  • Maybe.error(new Exception(“error”)).subscribe(…) affichera «Error: error”

These events are mutually exclusive for Maybe. Autrement dit,onComplete ne sera pas appelé aprèsonSuccess. Ceci est légèrement différent deFlowable puisqueonComplete sera appelé lorsque le flux sera terminé, même après éventuellement quelques invocations deonNext.

Single ne possède pas de signalonComplete commeMaybe car il est destiné à capturer un motif réactif qui peut soit émettre un élément, soit échouer.

D'un autre côté,Completable manque deonSuccess car il est destiné à traiter uniquement les situations de fin / échec.

Un autre cas d'utilisation du typeMaybe est de l'utiliser en combinaison avecFlowable. La méthodefirstElement() peut être utilisée pour créer desMaybe à partir deFlowable:

Flowable visitors = ...
visitors
  .skip(1000)
  .firstElement()
  .subscribe(
    v -> System.out.println("1000th visitor: " + v + " won the prize"),
    ex -> System.out.print("Error: " + ex.getMessage()),
    () -> System.out.print("We need more marketing"));

4. Conclusion

Dans ce court didacticiel, nous avons rapidement examiné l'utilisation de RxJavaMaybe<T> et son lien avec d'autres types réactifs tels queFlowable, Single etCompletable.

Comme toujours, des échantillons de code peuvent être trouvésover on GitHub.