Manipulando null em RxJava2

Com o próximoLiberação RxJava2 uma das mudanças importantes é quenull não é mais aceito como um elemento de fluxo, ou seja, o código a seguir lançará uma exceção:Observable.just(null)

Sinceramente, tenho sentimentos contraditórios sobre essa alteração e parte de mim entende que ela aplicará APIs limpas, mas vejo vários casos de uso quando isso pode ser um problema.

Por exemplo, no meu aplicativo, tenho um cache na memória:

@Nullable CacheItem findCacheItem(long id);

CacheItem pode não estar presente no cache, portanto, o método pode retornar um valor nulo.

O modo como é usado com o Rx * - é o seguinte:

Observable<CacheItem> getStream(final long id) {
    return Observable.fromCallable(new Callable<CacheItem>() {
        @Override public CacheItem call() throws Exception {
            return findCacheItem(id);
        }
    });
}

Portanto, com essa abordagem, eu posso ficar nulo no meu fluxo, que é uma situação totalmente válida, por isso é tratado adequadamente no lado do recebimento - digamos que a UI altere seu estado se o item não estiver presente no cache:

Observable.just(user)
          .map(user -> user.getName())
          .map(name -> convertNameToId(name))
          .flatMap(id -> getStream(id))
          .map(cacheItem -> getUserInfoFromCacheItem(cacheItem))
          .subscribe(
              userInfo -> {
                  if(userInfo != null) showUserInfo();
                  else showPrompt();
              }
          );

Com o RxJava2, não tenho mais permissão para postarnull no fluxo, então eu preciso agrupar meu CacheItem em alguma outra classe e fazer com que meu fluxo produza esse invólucro ou faça grandes mudanças na arquitetura.

O agrupamento de cada elemento de fluxo em uma contraparte anulável não parece certo para mim.

Estou perdendo algo fundamental aqui?

Parece que a situação como a minha é bastante popular, então estou curioso qual é a estratégia recomendada para resolver esse problema, dada a nova política "não nula" no RxJava2?

EDITAR Consulte a conversa de acompanhamento emRepo RxJava GitHub

questionAnswers(4)

yourAnswerToTheQuestion