RxJava2:替代 rx.Observable 方法 first(predicate)

RxJava2: Alternative to rx.Observable method first(predicate)

我想使用 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 只发出第一个不为 null 的项目,但这当然会失败,因为 io.reactivex.Observable 不会方法 first(Func1 predicate) 类似于 rx.Observable

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

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

Rx.Java 2.0 Doc - 1.0 x 2.0

考虑使用 Maybe 而不是可空类型的 Observable(它不适用于 RxJava2)。然后使用 Maybe.concat 只获取发出的项目 Flowable。只需获取第一个元素 first 到 return Single(你必须指定一个默认项)或 firstElement 到 return Maybe

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

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

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

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