我剛剛開始使用RxJava並嘗試一個示例項目。在RxJava2中使用flatMapIterable()
我試圖做到的,是
- >獲取一個對象 - > 其中包含的子對象的列表 - >檢查子列表滿足謂詞條件 - >併發出子-objects如果滿足
這是我的POJO
public class UpComingMovies {
@SerializedName("results")
private List<Movies> results;
}
public class Movies {
@SerializedName("overview")
private String overview;
@SerializedName("original_language")
private String originalLanguage;
}
所以,從我的理解是,我可以用flatMapIterable
和改造項目到多個觀測,然後用filter
說給我的電影WHI CH有originalLanguage.equals("en")
這就是我試圖做
@GET("movie/upcoming")
Observable<UpComingMovies> getUpComingMovies(@Query("api_key") String apiKey, @Query("page") String page);
private final CompositeDisposable disposables = new CompositeDisposable();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
disposables.add(RetrofitConnection.getService()
.getUpComingMovies(Config.API_KEY, "1")
.flatMapIterable(new Function<UpComingMovies, Iterable<Movies>>() {
@Override
public Iterable<Movies> apply(@NonNull UpComingMovies upComingMovies) throws Exception {
// no instance(s) of the type variable(s) U exist so that the Observable<U> conforms to a disposable
return upComingMovies.getResults();
}
})
.filter(movies -> movies.getVoteCount() > 200).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new DisposableObserver<Movies>() {
@Override
public void onNext(@NonNull Movies movies) {
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
}));
}
但是,它不能編譯。 克利裏我不知道如何做到這一點,任何幫助表示讚賞
我收到一個錯誤消息 - 沒有存在類型變量U的實例,因此Observable 符合一次性 –
'.getUpComingMovies(Config.API_KEY,「1」 )' '.flatMapIterable(UpComingMovies :: getResults)' '.filter(movies - > movies.originalLanguage.equals(「en」))' 這個爲我編譯。 – Jon
是的,它的工作。謝謝 –