RxJava Talvez

RxJava Talvez

1. Introdução

Neste tutorial, veremosthe 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. O tipoMaybe

Maybe é um tipo especial deObservable que só pode emitir zero ou um item e relatar um erro se o cálculo falhar em algum ponto.

A este respeito, é como uma união deSingleeCompletable. Todos esses tipos reduzidos, incluindoMaybe,, oferecem um subconjunto dos operadoresFlowable. Isso significawe can work with Maybe like a Flowable as long as the operation makes sense for 0 or 1 items.

Uma vez que pode emitir apenas um valor, não suporta o tratamento de contrapressão como com umFlowable:

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

Existem sinaisonSuccess, onErroreonComplete que podem ser assinados de uma fonteMaybe:

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

O código acima imprimiráEmitted item: 1, pois esta fonte emitirá um valor de sucesso.

Para as mesmas assinaturas:

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

  • Maybe.error(new Exception(“error”)).subscribe(…) imprimirá “Error: error”

These events are mutually exclusive for Maybe. Ou seja,onComplete não será invocado apósonSuccess. Isso é ligeiramente diferente deFlowable, poisonComplete será invocado quando o fluxo for concluído, mesmo após possivelmente algumas invocações deonNext.

Single não tem sinalonComplete comoMaybe porque se destina a capturar um padrão reativo que pode emitir um item ou falhar.

Por outro lado,Completable carece deonSuccess, uma vez que se destina a lidar apenas com situações de conclusão / falha.

Outro caso de uso para o tipoMaybe é usá-lo em combinação comFlowable. O métodofirstElement() pode ser usado para criarMaybe a 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. Conclusão

Neste breve tutorial, vimos rapidamente o uso do RxJavaMaybe<T> e como ele se relaciona com outros tipos reativos comoFlowable, SingleeCompletable.

Como sempre, as amostras de código podem ser encontradasover on GitHub.