RxJava操作符:創(chuàng)建操作

Create

——使用一個函數(shù)從頭開始創(chuàng)建一個Observable

Create操作符

代碼:

Observable.create(new Observable.OnSubscribe<String>() {
        @Override
        public void call(Subscriber<? super String> subscriber) {
            if (!subscriber.isUnsubscribed()) {//判斷觀察者的狀態(tài),如果沒有訂閱則不發(fā)送數(shù)據(jù)
                subscriber.onNext("created 操作符1");
                subscriber.onNext("created 操作符2");
                subscriber.onNext("created 操作符3");
                subscriber.onNext("created 操作符4");
                subscriber.onCompleted();
            }

        }
    }).subscribe(new Subscriber<String>() {
        @Override
        public void onCompleted() {
            Log.d(TAG, "onCompleted");
        }

        @Override
        public void onError(Throwable e) {
            Log.d(TAG, "onError:" + e.toString());
        }

        @Override
        public void onNext(String s) {
            Log.d(TAG, s);

        }
    });

輸出結(jié)果:

03-17 23:46:43.137 12009-12009/com.io.github.hjianfei.demo D/onResponse: created 操作符1
03-17 23:46:43.137 12009-12009/com.io.github.hjianfei.demo D/onResponse: created 操作符2
03-17 23:46:43.137 12009-12009/com.io.github.hjianfei.demo D/onResponse: created 操作符3
03-17 23:46:43.137 12009-12009/com.io.github.hjianfei.demo D/onResponse: created 操作符4
03-17 23:46:43.137 12009-12009/com.io.github.hjianfei.demo D/onResponse: onCompleted

From

——將其它種類的對象和數(shù)據(jù)類型轉(zhuǎn)換為Observable

From操作符

代碼:

String from[] = {"From操作符1", "From操作符2", "From操作符3", "From操作符4"};
    Observable.from(from)
            .subscribe(new Subscriber<String>() {
                @Override
                public void onCompleted() {
                    Log.d(TAG, "onCompleted");
                }

                @Override
                public void onError(Throwable e) {
                    Log.d(TAG, "onError:" + e.toString());

                }

                @Override
                public void onNext(String s) {
                    Log.d(TAG, s);

                }
            });

結(jié)果:

03-18 00:02:39.591 28131-28131/com.io.github.hjianfei.demo D/onResponse: From操作符1
03-18 00:02:39.591 28131-28131/com.io.github.hjianfei.demo D/onResponse: From操作符2
03-18 00:02:39.591 28131-28131/com.io.github.hjianfei.demo D/onResponse: From操作符3
03-18 00:02:39.591 28131-28131/com.io.github.hjianfei.demo D/onResponse: From操作符4
03-18 00:02:39.591 28131-28131/com.io.github.hjianfei.demo D/onResponse: onCompleted

Interval

——創(chuàng)建一個按固定時間間隔發(fā)射整數(shù)序列的Observable

Interval

Interval操作符返回一個Observable,它按固定的時間間隔發(fā)射一個無限遞增的整數(shù)序列。它接受一個表示時間間隔的參數(shù)和一個表示時間單位的參數(shù)。

interval(long,TimeUnit))
interval(long,TimeUnit,Scheduler))

代碼:

Observable.interval(5, TimeUnit.SECONDS)
                .subscribe(new Subscriber<Long>() {
                    @Override
                    public void onCompleted() {
                        Log.d(TAG, "onCompleted");
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "onError:" + e.toString());
                    }

                    @Override
                    public void onNext(Long aLong) {
                        Log.d(TAG, aLong+"");

                    }
                });

結(jié)果:

03-18 00:08:58.024 6346-6651/com.io.github.hjianfei.demo D/onResponse: 0
03-18 00:09:03.023 6346-6651/com.io.github.hjianfei.demo D/onResponse: 1
03-18 00:09:08.024 6346-6651/com.io.github.hjianfei.demo D/onResponse: 2
03-18 00:09:13.024 6346-6651/com.io.github.hjianfei.demo D/onResponse: 3
03-18 00:09:18.024 6346-6651/com.io.github.hjianfei.demo D/onResponse: 4
03-18 00:09:23.025 6346-6651/com.io.github.hjianfei.demo D/onResponse: 5
......
......

Just

——創(chuàng)建一個發(fā)射指定值的Observable

Just將單個數(shù)據(jù)轉(zhuǎn)換為發(fā)射那個數(shù)據(jù)的Observable。

Just類似于From,但是From會將數(shù)組或Iterable的數(shù)據(jù)取出然后逐個發(fā)射,而Just只是簡單的原樣發(fā)射,將數(shù)組或Iterable當做單個數(shù)據(jù)。

Just操作符

代碼:

    Observable.just("Just操作符1", "Just操作符2", "Just操作符3", "Just操作符4")
            .subscribe(new Subscriber<String>() {
                @Override
                public void onCompleted() {
                    Log.d(TAG, "onCompleted");
                }

                @Override
                public void onError(Throwable e) {
                    Log.d(TAG, "onError:" + e.toString());

                }

                @Override
                public void onNext(String just) {
                    Log.d(TAG, just);

                }
            });

結(jié)果:

03-18 00:16:30.458 16301-16301/com.io.github.hjianfei.demo D/onResponse: Just操作符1
03-18 00:16:30.458 16301-16301/com.io.github.hjianfei.demo D/onResponse: Just操作符2
03-18 00:16:30.458 16301-16301/com.io.github.hjianfei.demo D/onResponse: Just操作符3
03-18 00:16:30.458 16301-16301/com.io.github.hjianfei.demo D/onResponse: Just操作符4
03-18 00:16:30.458 16301-16301/com.io.github.hjianfei.demo D/onResponse: onCompleted

Range

——創(chuàng)建一個發(fā)射特定整數(shù)序列的Observable

Range操作符發(fā)射一個范圍內(nèi)的有序整數(shù)序列,你可以指定范圍的起始和長度。

RxJava將這個操作符實現(xiàn)為range函數(shù),它接受兩個參數(shù),一個是范圍的起始值,一個是范圍的數(shù)據(jù)的數(shù)目。如果你將第二個參數(shù)設為0,將導致Observable不發(fā)射任何數(shù)據(jù)(如果設置為負數(shù),會拋異常)。

Range操作符

代碼:

    Observable.range(1, 5)
            .subscribe(new Subscriber<Integer>() {
                @Override
                public void onCompleted() {
                    Log.d(TAG, "onCompleted");
                }

                @Override
                public void onError(Throwable e) {
                    Log.d(TAG, "onError:" + e.toString());
                }

                @Override
                public void onNext(Integer integer) {
                    Log.d(TAG, integer + "");

                }
            });

結(jié)果:

03-18 00:19:55.669 22020-22020/com.io.github.hjianfei.demo D/onResponse: 1
03-18 00:19:55.669 22020-22020/com.io.github.hjianfei.demo D/onResponse: 2
03-18 00:19:55.669 22020-22020/com.io.github.hjianfei.demo D/onResponse: 3
03-18 00:19:55.669 22020-22020/com.io.github.hjianfei.demo D/onResponse: 4
03-18 00:19:55.669 22020-22020/com.io.github.hjianfei.demo D/onResponse: 5
03-18 00:19:55.669 22020-22020/com.io.github.hjianfei.demo D/onResponse: onCompleted

Repeat

——創(chuàng)建一個發(fā)射特定數(shù)據(jù)重復多次的Observable

Repeat重復地發(fā)射數(shù)據(jù)。某些實現(xiàn)允許你重復的發(fā)射某個數(shù)據(jù)序列,還有一些允許你限制重復的次數(shù)。

RxJava將這個操作符實現(xiàn)為repeat方法。它不是創(chuàng)建一個Observable,而是重復發(fā)射原始Observable的數(shù)據(jù)序列,這個序列或者是無限的,或者通過repeat(n)指定重復次數(shù)。

Repeat操作符

代碼:

    Observable.just("Repeat操作符1", "Repeat操作符2", "Repeat操作符3")
            .repeat(2)
            .subscribe(new Subscriber<String>() {
                @Override
                public void onCompleted() {
                    Log.d(TAG, "onCompleted");
                }

                @Override
                public void onError(Throwable e) {
                    Log.d(TAG, "onError:" + e.toString());

                }

                @Override
                public void onNext(String just) {
                    Log.d(TAG, just);

                }
            });

結(jié)果:

03-18 00:24:50.660 28474-28474/com.io.github.hjianfei.demo D/onResponse: Repeat操作符1
03-18 00:24:50.661 28474-28474/com.io.github.hjianfei.demo D/onResponse: Repeat操作符2
03-18 00:24:50.661 28474-28474/com.io.github.hjianfei.demo D/onResponse: Repeat操作符3
03-18 00:24:50.665 28474-28474/com.io.github.hjianfei.demo D/onResponse: Repeat操作符1
03-18 00:24:50.665 28474-28474/com.io.github.hjianfei.demo D/onResponse: Repeat操作符2
03-18 00:24:50.665 28474-28474/com.io.github.hjianfei.demo D/onResponse: Repeat操作符3
03-18 00:24:50.665 28474-28474/com.io.github.hjianfei.demo D/onResponse: onCompleted

Timer

——創(chuàng)建一個Observable,它在一個給定的延遲后發(fā)射一個特殊的值。

Timer操作符創(chuàng)建一個在給定的時間段之后返回一個特殊值的Observable。

RxJava將這個操作符實現(xiàn)為timer函數(shù)。

timer返回一個Observable,它在延遲一段給定的時間后發(fā)射一個簡單的數(shù)字0。

Timer操作符

代碼:

    Observable.timer(2, java.util.concurrent.TimeUnit.SECONDS)
            .subscribe(new Subscriber<Long>() {
                @Override
                public void onCompleted() {
                    Log.d(TAG, "onCompleted");
                }

                @Override
                public void onError(Throwable e) {
                    Log.d(TAG, "onError:" + e.toString());
                }

                @Override
                public void onNext(Long aLong) {
                    Log.d(TAG, aLong + "");

                }
            });

結(jié)果:

03-18 00:29:42.656 3065-3533/com.io.github.hjianfei.demo D/onResponse: 0
03-18 00:29:42.656 3065-3533/com.io.github.hjianfei.demo D/onResponse: onCompleted

還有更多的操作符請查看 RXJava官方文檔

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

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

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