Manejo nulo en RxJava2

Con el próximoLanzamiento de RxJava2 Uno de los cambios importantes es quenull ya no se acepta como elemento de transmisión, es decir, el siguiente código arrojará una excepción:Observable.just(null)

Honestamente, tengo sentimientos encontrados sobre este cambio y una parte de mí entiende que impondrá API limpias, pero puedo ver varios casos de uso cuando esto podría ser un problema.

Por ejemplo, en mi aplicación tengo un caché en memoria:

@Nullable CacheItem findCacheItem(long id);

Es posible que CacheItem no esté presente en la memoria caché, por lo que el método puede devolver un valor nulo.

La forma en que se usa con Rx * es la siguiente:

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

Entonces, con este enfoque, podría obtener un valor nulo en mi flujo, lo que es una situación totalmente válida, por lo que se maneja correctamente en el lado receptor; digamos que la interfaz de usuario cambia su estado si el elemento no está presente en la memoria caché:

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();
              }
          );

Con RxJava2 ya no se me permite publicarnull abajo de la secuencia, por lo que necesito ajustar mi CacheItem en alguna otra clase y hacer que mi secuencia produzca ese contenedor o realizar cambios arquitectónicos bastante grandes.

Envolver cada elemento de flujo en una contraparte anulable no me parece correcto.

¿Me estoy perdiendo algo fundamental aquí?

Parece que la situación como la mía es bastante popular, así que tengo curiosidad por cuál es la estrategia recomendada para abordar este problema dada la nueva política "no nulo" en RxJava2.

EDITAR Consulte la conversación de seguimiento enRxJava GitHub repo

Respuestas a la pregunta(4)

Su respuesta a la pregunta