我想使用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
没有&#39} ; t方法first(Func1 predicate)
与rx.Observable
类似。
如果我在RxJava2中有任何选项,或者最好坚持使用RxJava1,我有什么选择?
答案 0 :(得分:4)
考虑使用Maybe
代替Observable
可空类型(它不能使用 RxJava2 )。然后使用Maybe.concat
仅将发出的项目设为Flowable
。只需使用first
的第一个元素返回Single
(您必须指定默认项)或firstElement
返回Maybe
:
Maybe.concat(source1, source2, source3, source4)
.firstElement()
答案 1 :(得分:1)
首先将其重命名为firstElement。此外,Rx 2.0不支持流上的空值。
答案 2 :(得分:1)
RxJava2不允许按其他人的建议发出 null 值。
但是,如果用于确定要返回的第一个值的谓词不是检查null,则可以考虑在.filter
之前使用.first
(需要指定一些默认值)或{{ 1}}(如果没有匹配则发出OnError)
.firstOrError