我有两个发出相同数据类型的可观察量。我需要合并它们
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());
以上将满足您的要求:
- 使用
mergeWith(...)
合并流 - 使用
flatMapIterable(...)
将列表排放转换为 NPost
排放 - 使用
distinct(...)
过滤掉任何重复的 ID - 收集整个流并使用
toList()
将其作为单个列表发出
您可以继续多次转换列表,直到获得所需的内容。