如何对两个可观察量使用自定义合并函数



我有两个发出相同数据类型的可观察量。我需要合并它们

    Single<Post.List> postsRecent = getRecentPosts()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread());
    Single<Post.List> postsPopular = getPopularPosts()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread());

现在我需要将这两个可观察量合并为一个,但是我不需要合并两个数组,我需要使用自定义函数来合并它们,例如我想排除具有相同 id 的重复帖子

是否可以使用 RxJava 实现这一点?

谢谢

我将在这里做一些假设,因为您尚未发布Post实现。假设我们有一个帖子列表:List<Post>

如果你想自己做所有肮脏的合并工作,你可以简单地使用Single.zip(...)

Single.zip(getRecentPosts(), 
           getPopularPosts(),
           (posts1, posts2) -> myCustomMergeMethod(posts1, posts2))
      .subscribeOn(Schedulers.io())
      .observeOn(AndroidSchedulers.mainThread());

目前尚不清楚您想用自定义合并做什么......但是,您几乎总是可以使用 rx 转换完成所有工作:

 getRecentPosts().mergeWith(getPopularPosts())
            .flatMapIterable(posts -> posts)
            .distinct(post -> post.getId())
            .toList()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread());

以上将满足您的要求:

  1. 使用 mergeWith(...) 合并流
  2. 使用 flatMapIterable(...) 将列表排放转换为 N Post排放
  3. 使用 distinct(...) 过滤掉任何重复的 ID
  4. 收集整个流并使用toList()将其作为单个列表发出

您可以继续多次转换列表,直到获得所需的内容。

最新更新