【问题标题】:RxJava2: Alternative to rx.Observable method first(predicate)RxJava2:替代 rx.Observable 方法 first(谓词)
【发布时间】:2017-07-29 14:38:39
【问题描述】:

我想使用 RxJava,但找不到替代方法

public final Observable<T> first(Func1<? super T,java.lang.Boolean> predicate)

在 RxJava2 中。

我想做的是:

return io.reactivex.Observable
    .concat(source1, source2, source3, source4)
    .first(obj -> obj != null);

参数 source1 到 source4 是我连接的 io.reactivex.Observable 实例,我希望结果 Observable 只发出第一个不为空的项目,但这当然会失败,因为 io.reactivex.Observable 没有方法 first(Func1 predicate) 喜欢rx.Observable

如果我在 RxJava2 中有任何选择,还是坚持使用 RxJava1 更好?

【问题讨论】:

    标签: java rx-java reactivex rx-java2


    【解决方案1】:

    RxJava2 不允许按照其他人的建议发出 null 值。

    但是,如果用于确定要返回的第一个值的谓词不是检查 null,那么您可以考虑在 .first 之前使用 .filter(需要指定一些默认值)或 .firstOrError(发出 OnError相反,如果没有匹配项)

    return io.reactivex.Observable
        .concat(source1, source2, source3, source4)
        .filter(obj -> obj == someAnotherObj)
        .firstOrError();
    

    【讨论】:

      【解决方案2】:

      考虑使用Maybe 而不是可空类型的Observable(它不适用于RxJava2)。然后使用Maybe.concat 仅获取发射项目为Flowable。并且只需使用first 获取第一个元素以返回Single(您必须指定默认项)或firstElement 以返回Maybe

      Maybe.concat(source1, source2, source3, source4)
          .firstElement()
      

      【讨论】:

        【解决方案3】:

        first 被重命名为 firstElement。此外,Rx 2.0 不支持流中的空值。

        Rx.Java 2.0 Doc - 1.0 x 2.0

        【讨论】:

          猜你喜欢
          • 2012-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-15
          • 2015-06-12
          • 2023-03-30
          • 1970-01-01
          相关资源
          最近更新 更多