我有一个名为Post的自定义对象。 POST有一个正文和一个标题,都是字符串。
我有一个Retrofit实例,它返回一个Observable<List<Post>>
我如何在Observable上使用.filter以便基于标题以“ t”开头的单个Post对象进行过滤?
到目前为止,这是我所能获得的,但无法将其包裹住。
fetchData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.filter(new Predicate<List<Post>>() {
@Override
public boolean test(List<Post> posts) throws Exception {
for (Post p : posts){
if (p.getTitle().startsWith("t"))
return true;
}
return false;
}
})
.subscribe(getPostObserver());
答案 0 :(得分:1)
您要做的是首先将List<Post>
的发射分解为每个Post
的单独发射。您可以通过flatMap()
对列表进行操作,如下所示:
Observable.just(Arrays.asList(
new Post("post #1", "this is the first post!"),
new Post("post #2", "this is the second post!"),
new Post("post #3", "this is the third post!")
))
.flatMap(list -> {
// turn the single emission of a list of Posts into a stream of
// many emissions of Posts...
return Observable.fromIterable(list);
})
.filter(post -> {
// apply filtering logic...
return true;
})
.subscribe(...);
希望有帮助!