通信を使うとき, 必要になるだろうよくあるパターンだと思います.
通信状況や不要なリクエストやキャッシュを使うかどうか.
どこからデータを取得してくるか.
- メモリ
- ストレージ
- ネットワーク
それぞれのソース別に Observable を作ったら, 優先順位をつけたら連結する.

条件をつけて, 最初の一つだけ利用する.

そんなサンプルコードがあります.
// Create our sequence for querying best available data
Observable<Data> source = Observable.concat(
    sources.memory(),
    sources.disk(),
    sources.network()
  )
  .first(data -> data != null && data.isUpToDate());
// "Request" latest data once a second
Observable.interval(1, TimeUnit.SECONDS)
  .flatMap(__ -> source)
  .subscribe(data -> System.out.println("Received: " + data.value));
rxjava-multiple-sources-sample/Sample.java
public Observable<GfyItem> getGfyItem(final String gifUrl, final String gfyName) {
  // Use the first source that returns a valid name
  return Observable.concat(
    // We already have the name
    Observable.just(gfyName),
    // We check for a pre-converted gif (for the gfyname)
    getPreExistingGfyName(gifUrl),
    // We need to convert the gif (then retrieve the gfyname)
    convertGifToGfyName(gifUrl)
  )
  .first(result -> !TextUtils.isEmpty(result))
  .flatMap(this::getMetadata)
  .map(GfyMetadata::getGfyItem);
}
android-gfycat/GfycatService.java
非常にわかりやすいサンプルや記事で勉強になりますっ.







