RxJava 2.x 之建立操作符
阿新 • • 發佈:2018-11-01
最近幾天想把Rxjava2的操作符都整理一下,看到網上的很多文章都總結的很好,但是時間久了依然會忘記。
建立操作符
- just操作符
- fromArray操作符
- empty操作符
- error操作符
- never操作符
- fromIterable操作符
- interval操作符
- intervalRange操作符
- range/rangeLong操作符
- defer操作符
just
just操作符一次可以傳送多個數據,最多支援10個數據元素
//最多支援10個數據元素
Observable.just(1, 2, 3, 4, 5)
.subscribeWith(new CommonObserver<>());
輸出:
onNext 1
onNext 2
onNext 3
onNext 4
onNext 5
onComplete
Process finished with exit code 0
fromArray
fromArray操作符接收任意長度的資料陣列
Observable.fromArray(1, 2, 3, 4, 5, 6, 7)
.subscribeWith(new CommonObserver<>());
輸出
onNext 1
onNext 2
onNext 3
onNext 4
onNext 5
onNext 6
onNext 7
onComplete
Process finished with exit code 0
empty
empty操作符不會發送任何資料,而是直接傳送onComplete事件
Observable.empty()
.subscribeWith(new CommonObserver<>());
輸出
:
onComplete
Process finished with exit code 0
error
error操作符不會發送任何資料,而是直接傳送onError事件
Observable.error(new NullPointerException())
.subscribeWith(new CommonObserver<>());
onError java.lang.NullPointerException
Process finished with exit code 0
never
never操作符什麼都不會發送的,也不會觸發觀察者任何的回撥
Observable.never()
.subscribeWith(new CommonObserver<>());
fromIterable
fromIterable操作符可以遍歷可迭代資料集合
Observable.fromIterable(Arrays.asList(1, 2, 3, 4, 5))
.subscribeWith(new CommonObserver<>());
輸出:
onNext 1
onNext 2
onNext 3
onNext 4
onNext 5
onComplete
Process finished with exit code 0
timer
timer操作符用來指定時間間隔觸發回撥
Observable.timer(1, TimeUnit.SECONDS).subscribeWith(new CommonObserver<>());
輸出:
onNext 0
onComplete
interval
interval操作符會不斷地傳送資料
Observable.interval(1, TimeUnit.SECONDS).subscribeWith(new CommonObserver<>());
輸出:
onNext 0
onNext 1
onNext 2
onNext 3
......
intervalRange
intervalRange操作符指定傳送資料的範圍和時間間隔
Observable.intervalRange(0, 5, 0, 1, TimeUnit.SECONDS).subscribeWith(new CommonObserver<>());
輸出:
onNext 0
onNext 1
onNext 2
onNext 3
onNext 4
onComplete
Process finished with exit code 0
注意:
當範圍內的資料傳送完畢就會回撥onComplete
方法
range / rangeLong
range和rangeLong操作符都是指定範圍傳送資料
Observable.range(0, 5).subscribeWith(new CommonObserver<>());
輸出:
onNext 0
onNext 1
onNext 2
onNext 3
onNext 4
onComplete
Process finished with exit code 0
defer
defer操作符可以使一個被觀察者訂閱多個觀察者
Observable<String> observable = Observable.defer(new Callable<ObservableSource<String>>() {
@Override
public ObservableSource<String> call() throws Exception {
return Observable.just("hello", "world");
}
});
//訂閱第一個觀察者
observable.subscribeWith(new CommonObserver<>());
//訂閱第二個觀察者
observable.subscribeWith(new CommonObserver<>());
輸出:
onNext hello
onNext world
onComplete
onNext hello
onNext world
onComplete
Process finished with exit code 0
注意:
只有當第一個觀察者執行完後才回去建立第二個被觀察者然後訂閱觀察者