Rxjava过滤器可观察到类型为List <object>

时间:2018-08-05 14:51:25

标签: list filter observable

我有一个名为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());

1 个答案:

答案 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(...);

希望有帮助!