创建组合两个但由一个统治的observable

时间:2018-06-07 15:13:47

标签: java kotlin rx-java2

我需要结合两个可观察量, A & B ,使用以下规则:

  1. 组合observable的类型必须为Maybe<A>
  2. A 可能会多次发光
  3. B 可能会发出1次或没有
  4. 只要 B 没有发出任何内容,合并的observable就不会发出任何内容。
  5. B 发出时,如果 A 已经发出,则 A 的最后结果将由组合的observable发出。如果 A 尚未发出,则会发出Maybe.empty()
  6. 我尝试过使用combineLatest,但如果 A 尚未发布,那么该功能无效。还尝试使用mergeWith并执行flatMap { if(it-was-**B**-who-emitted) Maybe.empty() else Maybe.just(emitted-item) },但我无法将ObservableSource转换为Maybe

    是否可以在RxJava 2中创建这样的observable?

1 个答案:

答案 0 :(得分:2)

我认为不能简单地使用默认的RxJava运算符来完成,但作为一种解决方法,您可以使用 A 发出“空元素”,并在开头使用您的值。然后,使用combineLatest,您可以检查发出的元素是否为“空元素”,如果是,则将其转换为Maybe.empty(),如此(使用Observable<String>示例):

Observable.combineLatest(
            a.startWith("EMPTY"),
            b,
            BiFunction<String, String, String> { a1, b1 -> a1 })
            .firstElement()
            .flatMap{ if (it == "EMPTY") Maybe.empty() else Maybe.just(it) }