1. 程式人生 > >RxJava 2.x 之建立操作符

RxJava 2.x 之建立操作符

最近幾天想把Rxjava2的操作符都整理一下,看到網上的很多文章都總結的很好,但是時間久了依然會忘記。

建立操作符

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

注意:
只有當第一個觀察者執行完後才回去建立第二個被觀察者然後訂閱觀察者

複習文件
https://github.com/byhook/rxjava2-study

參考:
https://maxwell-nc.github.io/android/rxjava2-2.html