RxJava Возможно

RxJava Возможно

1. Вступление

В этом руководстве мы рассмотримthe 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. ТипMaybe

Maybe - это особый видObservable, который может выдавать только ноль или один элемент и сообщать об ошибке, если в какой-то момент вычисление не удается.

В этом отношении это похоже на объединениеSingle иCompletable. Все эти сокращенные типы, включаяMaybe,, предлагают подмножество операторовFlowable. Это означаетwe can work with Maybe like a Flowable as long as the operation makes sense for 0 or 1 items.

Поскольку он может выдавать только одно значение, он не поддерживает обработку противодавления, как сFlowable:

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

Есть сигналыonSuccess, onError иonComplete, на которые можно подписаться из источникаMaybe:

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

Приведенный выше код напечатаетEmitted item: 1, поскольку этот источник выдаст значение успеха.

Для тех же подписок:

  • Maybe.empty().subscribe(…) напечатает“Completed. No items.”

  • Maybe.error(new Exception(“error”)).subscribe(…) напечатает «Error: error”

These events are mutually exclusive for Maybe. То естьonComplete не будет вызываться послеonSuccess. Это немного отличается отFlowable, посколькуonComplete будет вызываться после завершения потока даже после, возможно, нескольких вызововonNext.

Single не имеет сигналаonComplete, такого какMaybe, потому что он предназначен для захвата реактивного паттерна, который может либо выдать один элемент, либо выйти из строя.

С другой стороны, вCompletable отсутствуетonSuccess, поскольку он предназначен только для ситуаций завершения / отказа.

Другой вариант использования типаMaybe - его использование в сочетании сFlowable.. МетодfirstElement() можно использовать для созданияMaybe изFlowable:

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. Заключение

В этом коротком руководстве мы быстро рассмотрели использование RxJavaMaybe<T> и его связь с другими реактивными типами, такими какFlowable, Single иCompletable..

Как всегда можно найти примеры кодаover on GitHub.