對於大多數初學者來講,看到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 廣州