【发布时间】:2017-09-24 05:55:51
【问题描述】:
我刚刚开始使用 RxJava 并尝试一个示例项目。
我想要实现的是
-> 获取一个对象-> 其中包含子对象列表 -> 检查子列表是否满足谓词条件 -> 如果满足则发出子对象
这是我的 POJO
public class UpComingMovies {
@SerializedName("results")
private List<Movies> results;
}
public class Movies {
@SerializedName("overview")
private String overview;
@SerializedName("original_language")
private String originalLanguage;
}
所以,据我了解,我可以使用flatMap 并将项目转换为多个可观察对象,然后使用filter 说给我有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 {
// does not compile - needs an iterable
return upComingMovies.getResults().iterator();
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableObserver<UpComingMovies>() {
@Override
public void onNext(UpComingMovies upComingMovies) {
Log.d(getClass().getName(), upComingMovies.toString());
}
@Override
public void onError(Throwable e) {
Log.d(getClass().getName(), e.getMessage());
}
@Override
public void onComplete() {
Log.d(getClass().getSimpleName(), "onComplete");
}
}));
}
但是,它不能编译。 显然我不知道该怎么做,感谢任何帮助
【问题讨论】:
-
你只需要
return upComingMovies.getResults().iterator(),不是吗? -
需要可迭代而不是迭代器,另一种方法可能是使用映射和变换到电影并在那里添加过滤器?关于如何做到这一点的任何想法?
-
类似的想法。只需返回结果列表
-
getResults()是List。List是Iterable。