RxJava Vielleicht

RxJava Vielleicht

1. Einführung

In diesem Tutorial sehen wir unsthe Maybe<T> type in RxJava – which represents a stream which can emit a single value, complete in an empty state or report an error an.

2. DerMaybe-Typ

Maybe ist eine spezielle Art vonObservable, die nur null oder ein Element ausgeben und einen Fehler melden kann, wenn die Berechnung irgendwann fehlschlägt.

In dieser Hinsicht ist es wie eine Vereinigung vonSingle undCompletable. Alle diese reduzierten Typen, einschließlichMaybe,, bieten eine Teilmenge derFlowable-Operatoren. Dies bedeutetwe can work with Maybe like a Flowable as long as the operation makes sense for 0 or 1 items.

Da nur ein Wert ausgegeben werden kann, wird der Umgang mit Gegendruck nicht unterstützt, wie beiFlowable:

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

Es gibtonSuccess, onError- undonComplete-Signale, die von einerMaybe-Quelle abonniert werden können:

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

Der obige Code gibtEmitted item: 1 aus, da diese Quelle einen Erfolgswert ausgibt.

Für die gleichen Abos:

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

  • Maybe.error(new Exception(“error”)).subscribe(…) gibt "Error: error”" aus

These events are mutually exclusive for Maybe. Das heißt,onComplete wird nachonSuccess nicht mehr aufgerufen. Dies unterscheidet sich geringfügig vonFlowable, daonComplete aufgerufen wird, wenn der Stream auch nach möglicherweise einigenonNext-Aufrufen abgeschlossen ist.

Single hat keinonComplete-Signal wieMaybe, da es ein reaktives Muster erfassen soll, das entweder ein Element aussenden oder fehlschlagen kann.

Auf der anderen Seite fehltCompletableonSuccess, da es nur für vollständige / fehlgeschlagene Situationen gedacht ist.

Ein weiterer Anwendungsfall für den TypMaybe ist die Verwendung in Kombination mitFlowable.. Mit der MethodefirstElement() könnenMaybe ausFlowable erstellt werden:

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. Fazit

In diesem kurzen Tutorial haben wir uns schnell mit der Verwendung von RxJavaMaybe<T>und deren Beziehung zu anderen reaktiven Typen wieFlowable, Single undCompletable. befasst

Wie immer finden sich Codebeispiele inover on GitHub.