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

时间:2017-10-07 05:41:43

标签: android rx-java rx-android rx-java2

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

for

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

是否可以使用RxJava实现此目的?

由于

1 个答案:

答案 0 :(得分:0)

我将在此处做出一些假设,因为您尚未发布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. 合并流
  3. 使用Post
  4. 将列表发射转换为 n flatMapIterable(...)排放
  5. 使用distinct(...)
  6. 过滤掉任何重复的ID
  7. 使用toList()
  8. 收集整个流并将其作为单个列表发出

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