Rxjava 創建操作符(三)

操作符入門:

RxJava 操作符的類型分為創建操作符、變換操作符、過濾操作符、組合操作符、錯誤處理操作符、輔助操作符、條件和布爾操作符、算數和聚合操作符及連接操作符等。而這些操作符類型下又有很多操作,每個操作又有很多變體。

常用的創建操作符:

常用的有 create、just、from
不常用的有 defer、range、interval、start、repeat 和 timer

一、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);
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一、RxJava操作符概述 RxJava中的操作符就是為了提供函數式的特性,函數式最大的好處就是使得數據處理簡潔易...
    BrotherChen閱讀 1,652評論 0 10
  • 一、RxJava操作符概述 RxJava中的操作符就是為了提供函數式的特性,函數式最大的好處就是使得數據處理簡潔易...
    測天測地測空氣閱讀 647評論 0 1
  • 一、RxJava操作符概述 RxJava中的操作符就是為了提供函數式的特性,函數式最大的好處就是使得數據處理簡潔易...
    無求_95dd閱讀 3,168評論 0 21
  • RxJava正在Android開發者中變的越來越流行。唯一的問題就是上手不容易,尤其是大部分人之前都是使用命令式編...
    劉啟敏閱讀 1,902評論 1 7
  • 前言 按照官方的分類,操作符大致分為以下幾種: Creating Observables(Observable的創...
    小玉1991閱讀 1,066評論 0 1