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.