RXJava

對於大多數初學者來講,看到RxJava的代碼是懵逼的,我也同樣,特別是鏈式的代碼,一看就懵逼,最近,稍微搞清楚了一點,以此小記一番:java

首先,咱們來看常規的代碼app

//建立一個Observable<可觀察的對象>:
public static Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
    @Override
    public void subscribe(ObservableEmitter<String> emitter) throws Exception {
        emitter.onNext("hello");
        emitter.onComplete();
    }
});
//建立一個Observer<觀察者>
public static Observer observer = new Observer<String>() {
    @Override
    public void onSubscribe(Disposable d) {
        System.out.println("observer-->onSubscribe");
    }

    @Override
    public void onNext(String value) {
        System.out.println("observer-onNext->"+value);
    }
    @Override
    public void onError(Throwable e) {
        System.out.println("observer-->onError");
    }
    @Override
    public void onComplete() {
        System.out.println("observer-->onComplete");
    }
};
//可觀察者和觀察者之間創建聯繫
observable.subscribe(observer);

  看到這裏,大多數同窗仍是能夠看明白的,由於這是很常規的代碼,兩個對象而已,沒了ide

  這段代碼的輸出的結果是:函數

observer-->onSubscribe
observer-onNext->hello
observer-->onComplete

  而後變一個樣式,鏈式的時候是這樣的server

Observable.create(new ObservableOnSubscribe<String>() {
    @Override
    public void subscribe(ObservableEmitter<String> emitter) throws Exception {
        emitter.onNext("2");
        emitter.onComplete();
    }
}).subscribe(new Observer<String>() {
    @Override
    public void onSubscribe(Disposable d) {
        System.out.println("observer-->onSubscribe");
    }

    @Override
    public void onNext(String value) {
        System.out.println("observer-onNext->" + value);
    }

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

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

  上面兩段代碼的效果是徹底如出一轍的啊。只是寫法簡潔了不少,可是對於初學者來講看起來就比較困難了 對象

 

  下面來看看justblog

Observable.just("hello").subscribe(new Observer<String>() {
    @Override
    public void onSubscribe(Disposable d) {
        System.out.println("observer-->onSubscribe");
    }

    @Override
    public void onNext(String value) {
        System.out.println("observer-onNext->" + value);
    }

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

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

  這段代碼,看起來是否是似曾相識的感受,Observable 的 create 方法返回的是一個 Onservable對象, 一樣的,just 方法也是返回的也是一個 Observable、it

  這就很明白了,而二者的區別就是:Just是現有的數據,不用作處理,用 create 的方法,能夠在 subscribe 裏面作一些操做,包括對數據的處理等,最後調用 onNext 的時候把相應的數據發送出去io

  

  下面來看看 map 操做class

  

Observable.create(new ObservableOnSubscribe<String>() {
    @Override
    public void subscribe(ObservableEmitter<String> emitter) throws Exception {
        emitter.onNext("2");
        emitter.onComplete();
    }
}).map(new Function<String, Integer>() {
    //map基本做用就是將一個Observable經過某種函數關係,轉換爲另外一種Observable,
    //這個例子中就是把咱們的String數據變成了Integer類型
    @Override
    public Integer apply(String s) throws Exception {
        return Integer.parseInt(s);
    }
}).subscribe(new Observer<Integer>() {
    @Override
    public void onSubscribe(Disposable d) {
        System.out.println("observer-->onSubscribe");
    }

    @Override
    public void onNext(Integer value) {
        System.out.println("observer-onNext->" + value);
    }

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

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

  這個和第二段代碼的區別是,裏面多了一個map的操做,你點擊 map 進去你就會發現, map 也是返回的是一個 Observable 對象

  這個例子中,看最後的 subscribe 的時候 Observer 的類型也相應的變化了,由原來的 String  類型變成了 Integer 類型

  沒錯,這就是map的操做,map的做用就是使 Obasevable 的類型發生變化

  這裏要注意的是 Function 的第一個參數是原來Observable的對象的類型,而第二個參數是通過轉換後的Observable的類型,能夠粗略的理解成方法入參和返回值吧

 

 

 

暫且記敘到這裏:2017-11-15 22:50 廣州

相關文章
相關標籤/搜索