2017-06-19 44 views
1

我有一個retrofit2觀察到的呼叫我執行和它完成它鏈到另一個可觀測到的結果存儲到db.It之後看起來簡直像這樣:Rxjava - 當鏈接observables如何取回其他類型的流(返回值)而不是當前?

protected Observable<List<Long>> buildUseCaseObservable() { 
     return mDataRepo.fetchCountries().flatMap(new Function<List<CountryModel>, ObservableSource<List<Long>>>() { 
      @Override 
      public ObservableSource<List<Long>> apply(@NonNull List<CountryModel> countryModels) throws Exception { 
       return mDataRepo.storeCountries(countryModels); 
      } 
     }); 
    } 

現在我的問題是我想要的訂戶收回第一個可觀察結果。因此,像 訂戶的id可以取回<List<CountryModel>>,而不是現在返回的<List<Long>>。無論如何要做到這一點?不確定concat是否可以提供幫助?

回答

2

其實,是的,你可以使用flatMap()變異與resultSelector,他們可以選擇或輸入和輸出的flatMap()和你的情況簡單地返回結合牽強的國家,而不是IDS:

protected Observable<List<CountryModel>> buildUseCaseObservable() { 
    Repo mDataRepo = new Repo(); 
    return mDataRepo.fetchCountries() 
      .flatMap(new Function<List<CountryModel>, ObservableSource<List<Long>>>() { 
       @Override 
       public ObservableSource<List<Long>> apply(
         @android.support.annotation.NonNull List<CountryModel> countryModels) throws Exception { 
        return mDataRepo.storeCountries(countryModels); 
       } 
      }, new BiFunction<List<CountryModel>, List<Long>, List<CountryModel>>() { 
       @Override 
       public List<CountryModel> apply(List<CountryModel> countryModels, 
               List<Long> longs) throws Exception { 
        return countryModels; 
       } 
      }); 
} 
相關問題