【问题标题】:Create observable that combines two but is ruled by one创建组合两个但由一个统治的可观察对象
【发布时间】:2018-06-08 00:00:16
【问题描述】:

我需要使用以下规则组合两个 observable,AB

  1. 组合的可观察对象的类型必须是Maybe<A>
  2. A 可能发射多次或不发射
  3. B 可能发射 1 次或不发射
  4. 只要 B 没有发出任何东西,组合的 observable 就不会发出任何东西。
  5. B 发射时,如果 A 已发射,则 A 的最后一个结果将由组合的 observable 发射。如果 A 还没有发出,Maybe.empty() 将被发出。

我曾尝试使用 combineLatest,但如果 A 尚未发出,则此方法不起作用。还尝试使用mergeWith 并执行flatMap { if(it-was-**B**-who-emitted) Maybe.empty() else Maybe.just(emitted-item) },但我无法从ObservableSource 转换为Maybe

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

【问题讨论】:

  • 你有没有尝试过?发生了什么?
  • @Michael 我已经用我尝试过的描述更新了问题
  • “将发出空的”是什么意思?以防 A 尚未发出
  • @michalbrz 更新了问题。这是Maybe.empty()

标签: java kotlin rx-java2


【解决方案1】:

我认为这不能简单地使用默认的 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) }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多