我刚刚开始使用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
是的,它的工作。谢谢 –