2017-03-08 73 views
2

我想用RxJava但不能想出替代的方法RxJava2:替代rx.Observable方法首先(謂語)

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); 

參數源1至source4是io.reactivex.Observable情況下,我串連,我希望得到的可觀察到發射只,第一項就是不爲空,但這個過程的因爲io.reactivex.Observable沒有像rx.Observable這樣的方法first(Func1 predicate),所以失敗。

如果我在RxJava2中有任何選擇,或者最好堅持使用RxJava1,我有什麼選擇?

回答

3

考慮使用Maybe而不是可空類型的Observable(它不會與RxJava2工作)。然後使用Maybe.concat僅獲取排放項目Flowable。而剛剛拿到的第一個元素與first返回Single(你必須指定一個默認的項目)或firstElement返回Maybe

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

RxJava2不允許發射值由別人的建議。

但是,如果用於確定哪些要返回第一個值謂詞是不檢查空,你可以再考慮使用.filter之前.first(需要指定一些默認值)或.firstOrError(發射的OnError而不是如果沒有匹配)

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