1. 程式人生 > >RX操作符之Observable的建立方式一(just、from、repeat、repeatWhen)

RX操作符之Observable的建立方式一(just、from、repeat、repeatWhen)

以下的建立方法不需要手動再重新呼叫Subscriber中的方法

一、just方法

建立傳送指定值的Observerble,just只是簡單的原樣發射,將陣列或Iterable當做單個數據。如果傳遞的值為null,則傳送的Observable的值為null。引數最多為9個

 Observable<String> myObservable = Observable.just("just1","just1","just1","just1","just1","just1","just1","just1","just1","just1");

        Subscriber<String> mySubscriber = new Subscriber<String>() {
            @Override
            public void onNext(String s) {
                System.out.println(s);
            }

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

            @Override
            public void onError(Throwable e) {
                System.out.println("onError....................");
            }
        };

        myObservable.subscribe(mySubscriber);

執行的結果:


二、from方法

將資料轉換成為Observables,而不是需要混合使用Observables和其它型別的資料

 String[]items = {"just1","just1","just1","just1","just1","just1"};

        Observable<String> myObservable = Observable.from(items);

        Subscriber<String> mySubscriber = new Subscriber<String>() {
            @Override
            public void onNext(String s) {
                System.out.println(s);
            }

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

            @Override
            public void onError(Throwable e) {
                System.out.println("onError....................");
            }
        };

        myObservable.subscribe(mySubscriber);


三、repeat方法

1.repeat()重複地執行某個操作,如果不傳遞引數,結果將會被無限地重複執行,預設在trampoline排程器上執行,該方法為非靜態方法,不可以直接通過Observable來呼叫

 String[]items = {"just1","just2","just3","just4","just5","just6"};

        Observable<String> myObservable = Observable.from(items).repeat();


        Subscriber<String> mySubscriber = new Subscriber<String>() {
            @Override
            public void onNext(String s) {
                System.out.println(s);
            }

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

            @Override
            public void onError(Throwable e) {
                System.out.println("onError....................");
            }
        };

        myObservable.subscribe(mySubscriber);


2.repeat()如果傳入數字型別的引數,則重複地執行指定次數的某個操作,預設在trampoline排程器上執行,不可以直接通過Observable來呼叫

String[]items = {"just1","just2","just3","just4","just5","just6"};

        Observable<String> myObservable = Observable.from(items).repeat(2);


        Subscriber<String> mySubscriber = new Subscriber<String>() {
            @Override
            public void onNext(String s) {
                System.out.println(s);
            }

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

            @Override
            public void onError(Throwable e) {
                System.out.println("onError....................");
            }
        };

        myObservable.subscribe(mySubscriber);

執行結果:

3.repeatWhen()不是快取和重放原始Observable的資料序列,而是有條件的重新訂閱和發射原來的Observable,當Observable中的call()方法中呼叫了重複執行的程式碼時,onNext()將會被重複執行。如果該方法執行後返回void,則結束執行

 final String[]items = {"just1","just2","just3","just4","just5","just6"};

        Observable<String> myObservable = Observable.from(items).repeatWhen(new Func1<Observable<? extends Void>, Observable<?>>() {
            @Override
            public Observable<?> call(Observable<? extends Void> observable) {
                return observable.delay(5, TimeUnit.SECONDS);
            }
        });


        Subscriber<String> mySubscriber = new Subscriber<String>() {
            @Override
            public void onNext(String s) {
                System.out.println("onNext.................."+s);
            }

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

            @Override
            public void onError(Throwable e) {
                System.out.println("onError....................");
            }
        };

        myObservable.subscribe(mySubscriber);

執行結果:


4.doWhile 屬於可選包rxjava-computation-expressions,不是RxJava標準操作符的一部分。doWhile在原始序列的每次重複後檢查某個條件,如果滿足條件才重複發射。

5.whileDo 屬於可選包rxjava-computation-expressions,不是RxJava標準操作符的一部分。whileDo在原始序列的每次重複前檢查某個條件,如果滿足條件才重複發射。