RxJava2.0 操作符(1)—— Create 創(chuàng)建操作

RxJava2.0 操作符(1)—— Create 創(chuàng)建操作

Create 創(chuàng)建類操作符

Create — 使用一個(gè)函數(shù)從頭創(chuàng)建一個(gè) Observable。
Defer — 只有當(dāng)訂閱者訂閱才創(chuàng)建 Observable;為每個(gè)訂閱創(chuàng)建一個(gè)新的 Observable。
Empty — 創(chuàng)建一個(gè)什么都不做直接通知完成的 Observable。
Error — 創(chuàng)建一個(gè)什么都不做直接通知錯(cuò)誤的 Observable。
From — 將一個(gè) Iterable, 一個(gè) Future, 或者一個(gè)數(shù)組轉(zhuǎn)換成一個(gè) Observable。
Interval — 創(chuàng)建一個(gè)按照給定的時(shí)間間隔發(fā)射整數(shù)序列的 Observable。
Just — 將一個(gè)或多個(gè)對(duì)象轉(zhuǎn)換成發(fā)射這個(gè)或這些對(duì)象的一個(gè) Observable。
Range — 創(chuàng)建一個(gè)發(fā)射指定范圍的整數(shù)序列的 Observable。
Repeat — 創(chuàng)建一個(gè)重復(fù)發(fā)射指定數(shù)據(jù)或數(shù)據(jù)序列的 Observable。
RepeatWhen — 創(chuàng)建一個(gè)重復(fù)發(fā)射指定數(shù)據(jù)或數(shù)據(jù)序列的 Observable,它依賴于另一個(gè) Observable 發(fā)射的數(shù)據(jù)。
Never — 創(chuàng)建一個(gè)不發(fā)射任何數(shù)據(jù)的 Observable。
Timer — 創(chuàng)建一個(gè)在給定的延時(shí)之后發(fā)射單個(gè)數(shù)據(jù)的 Observable。

1.1 Create

使用一個(gè)函數(shù)從頭創(chuàng)建一個(gè) Observable。



示例代碼:

 Observable.create(new ObservableOnSubscribe<String>() {
    @Override
    public void subscribe(@NonNull ObservableEmitter<String> emitter) throws Exception {
        for (int i = 1; i < 5; i++) {
            emitter.onNext(i+"");
        }
        emitter.onComplete();
    }
}).subscribe(new Observer<String>() {
    @Override
    public void onSubscribe(@NonNull Disposable d) {

    }

    @Override
    public void onNext(@NonNull String s) {
        System.out.println("Next: " + s);
    }

    @Override
    public void onError(@NonNull Throwable error) {
        System.err.println("Error: " + error.getMessage());
    }

    @Override
    public void onComplete() {
        System.out.println("Sequence complete.");
    }

輸出:

Next: 1
Next: 2
Next: 3
Next: 4
Sequence complete.

1.2 defer

只有當(dāng)訂閱者訂閱才創(chuàng)建 Observable;才會(huì)為每個(gè)訂閱創(chuàng)建一個(gè)新的 Observable。



示例代碼:

Observable<String> observable = Observable.defer(new Callable<ObservableSource<? extends String>>() {
        @Override
        public ObservableSource<? extends String> call() throws Exception {
            return Observable.just("String");
        }
    });
    observable.subscribe(new Consumer<String>() {
        @Override
        public void accept(@NonNull String s) throws Exception {
            System.out.println(s);
        }
    });

輸出:

String

1.3 Empty

創(chuàng)建一個(gè)什么都不做直接通知完成的 Observable。



示例代碼:

 Observable.create(new ObservableOnSubscribe<String>() {
    @Override
    public void subscribe(@NonNull ObservableEmitter<String> emitter) throws Exception {
        for (int i = 1; i < 5; i++) {
            emitter.onNext(i+"");
        }
        emitter.onComplete();
    }
}).subscribe(new Observer<String>() {
    @Override
    public void onSubscribe(@NonNull Disposable d) {

    }

    @Override
    public void onNext(@NonNull String s) {
        System.out.println("Next: " + s);
    }

    @Override
    public void onError(@NonNull Throwable error) {
        System.err.println("Error: " + error.getMessage());
    }

    @Override
    public void onComplete() {
        System.out.println("Sequence complete.");
    }
});

輸出結(jié)果:

onComplete

1.3 Error

創(chuàng)建一個(gè)什么都不做直接通知錯(cuò)誤的 Observable。



示例代碼:

 Observable<String> observable = Observable.error(new Callable<Throwable>() {
    @Override
    public Throwable call() throws Exception {
        return new NullPointerException();
    }
});
observable.subscribe(new Observer<String>() {
    @Override
    public void onSubscribe(@NonNull Disposable d) {

    }

    @Override
    public void onNext(@NonNull String s) {
        System.out.println("Next: " + s);
    }

    @Override
    public void onError(@NonNull Throwable error) {
        System.err.println("Error: " + error.getMessage());
    }

    @Override
    public void onComplete() {
        System.out.println("onComplete");
    }
});

輸出結(jié)果:

Error: null

1.4 From

將一個(gè) Iterable, 一個(gè) Future, 或者一個(gè)數(shù)組轉(zhuǎn)換成一個(gè) Observable。



示例代碼1:

//1.遍歷集合
List<String> items = new ArrayList<>();
for (int i = 0; i < 3; i++) {
    items.add(i + "");
}
Observable<String> observable = Observable.fromIterable(items);
//Observable<String> observable = Observable.fromArray(new String[]{"Hello", "world"});
observable.subscribe(new Consumer<String>() {
    @Override
    public void accept(@NonNull String s) throws Exception {
         System.out.println("result:" + s);
    }
});

輸出結(jié)果:

result:0
result:1
result:2

1.5 Interval

創(chuàng)建一個(gè)按照給定的時(shí)間間隔發(fā)射整數(shù)序列的 Observable。



示例代碼:

final CompositeDisposable disposable = new CompositeDisposable();
disposable.add(Observable.interval(1, TimeUnit.SECONDS).subscribeWith(new DisposableObserver<Long>() {
    @Override
    public void onNext(@NonNull Long aLong) {
        System.out.println("Next: " + aLong);
    }

    @Override
    public void onError(@NonNull Throwable error) {
        System.err.println("Error: " + error.getMessage());
    }

    @Override
    public void onComplete() {
        System.out.println("onComplete");
    }
}));
//5秒后取消訂閱
try {
    Thread.sleep(4000);
    //取消訂閱
    disposable.dispose();
} catch (InterruptedException e) {
    e.printStackTrace();
}

輸出結(jié)果:

Next: 0
Next: 1
Next: 2
Next: 3

1.6 Just

將一個(gè)或多個(gè)對(duì)象轉(zhuǎn)換成發(fā)射這個(gè)或這些對(duì)象的一個(gè) Observable。



示例代碼:

Observable.just(1, 2, 3).subscribe(new Observer<Integer>() {
    @Override
    public void onSubscribe(@NonNull Disposable d) {

    }

    @Override
    public void onNext(@NonNull Integer s) {
        System.out.println("Next: " + s);
    }

    @Override
    public void onError(@NonNull Throwable error) {
        System.err.println("Error: " + error.getMessage());
    }

    @Override
    public void onComplete() {
        System.out.println("onComplete");
    }
});

輸出結(jié)果:

Next: 1
Next: 2
Next: 3
onComplete

1.7 Range

創(chuàng)建一個(gè)發(fā)射指定范圍的整數(shù)序列的 Observable。
RxJava 將這個(gè)操作符實(shí)現(xiàn)為 range 函數(shù),它接受兩個(gè)參數(shù),一個(gè)是范圍的起始值,一個(gè)是范圍的數(shù)據(jù)的數(shù)目。如果你將第二個(gè)參數(shù)設(shè)為 0,將導(dǎo)致 Observable 不發(fā)射任何數(shù)據(jù)(如果設(shè)置為負(fù)數(shù),會(huì)拋異常)



示例代碼:

// 依次發(fā)射 10、11、12
Observable.range(10, 2).subscribe(new Observer<Integer>() {
    @Override
    public void onSubscribe(@NonNull Disposable d) {

    }

    @Override
    public void onNext(@NonNull Integer s) {
        System.out.println("Next: " + s);
    }

    @Override
    public void onError(@NonNull Throwable error) {
        System.err.println("Error: " + error.getMessage());
    }

    @Override
    public void onComplete() {
        System.out.println("onComplete");
    }
});

輸出結(jié)果:

Next: 10
Next: 11
Next: 12
onComplete

1.8 Repeat

創(chuàng)建一個(gè)重復(fù)發(fā)射指定數(shù)據(jù)或數(shù)據(jù)序列的 Observable。



示例代碼:

//重復(fù)三次,repeat()就是無限次
Observable.just("hello", "world").repeat(3).subscribe(new Observer<Object>() {
    @Override
    public void onSubscribe(@NonNull Disposable d) {

    }

    @Override
    public void onNext(@NonNull Object o) {
        System.out.println("onNext:" + o.toString());
    }

    @Override
    public void onError(@NonNull Throwable error) {
        System.err.println("Error: " + error.getMessage());
    }

    @Override
    public void onComplete() {
        System.out.println("onComplete");
    }
});

輸出結(jié)果:

onNext:hello
onNext:world
onNext:hello
onNext:world
onNext:hello
onNext:world
onComplete

1.9 RepeatWhen

創(chuàng)建一個(gè)重復(fù)發(fā)射指定數(shù)據(jù)或數(shù)據(jù)序列的 Observable,它依賴于另一個(gè) Observable 發(fā)射的數(shù)據(jù)。

1.10 Never

創(chuàng)建一個(gè)不發(fā)射任何數(shù)據(jù)的 Observable。



(ps:不太懂有何意義)

1.11 Timer

創(chuàng)建一個(gè)在給定的延時(shí)之后發(fā)射單個(gè)數(shù)據(jù)的 Observable。
在 RxJava 1.0.0 及其之后的版本,官方已不再提倡使用 timer() 操作符,因?yàn)?interval() 具有同樣的功能。



示例代碼:

Observable.timer(1, TimeUnit.SECONDS)
    .subscribe(new Consumer<Long>() {
        @Override
        public void accept(@NonNull Long aLong) throws Exception {
            System.out.println("result:" + aLong);
        }
    });

輸出結(jié)果:

result:0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本篇文章介主要紹RxJava中操作符是以函數(shù)作為基本單位,與響應(yīng)式編程作為結(jié)合使用的,對(duì)什么是操作、操作符都有哪些...
    嘎啦果安卓獸閱讀 2,994評(píng)論 0 10
  • 這個(gè)頁面展示的操作符可用于組合多個(gè) Observables。 Delay — 延時(shí)發(fā)射 Observable 的結(jié)...
    DoubleThunder閱讀 3,147評(píng)論 0 3
  • 注:只包含標(biāo)準(zhǔn)包中的操作符,用于個(gè)人學(xué)習(xí)及備忘參考博客:http://blog.csdn.net/maplejaw...
    小白要超神閱讀 2,381評(píng)論 2 8
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,724評(píng)論 19 139
  • 作者: maplejaw本篇只解析標(biāo)準(zhǔn)包中的操作符。對(duì)于擴(kuò)展包,由于使用率較低,如有需求,請(qǐng)讀者自行查閱文檔。 創(chuàng)...
    maplejaw_閱讀 46,234評(píng)論 8 93

友情鏈接更多精彩內(nèi)容