1. 程式人生 > >RxJava 中的map與flatMap

RxJava 中的map與flatMap

1、map和flatMap都是接受一個函式作為引數(Func1)
2、map函式只有一個引數,引數一般是Func1,Func1的<I,O>I,O模版分別為輸入和輸出值的型別,實現Func1的call方法對I型別進行處理後返回O型別資料

3、flatMap函式也只有一個引數,也是Func1,Func1的<I,O>I,O模版分別為輸入和輸出值的型別,實現Func1的call方法對I型別進行處理後返回O型別資料,不過這裡O為Observable型別

map例項       

         

這裡map裡面直接對引數處理


flatMap例項:


這裡用 Observable.just(s)在裡面對引數進行處理並返回一個Observable,


上面兩個例子效果是一樣的,注意的就是引數,返回值不一樣,我們再來看幾個:


這裡在map裡面返回了一個Observable,注意subscribe的引數也要變成了Observable<String>,否則會有異常<這麼寫主要是當時不太明白map和flatMap的區別,想看一下到底有什麼區別>

Map一般用於對原始的引數進行加工處理,返回值還是基本的型別,可以在subscribe中使用(適用)的型別。

flatMap一般用於輸出一個Observable,而其隨後的subscribe中的引數也跟Observable中的引數一樣,注意不是Observable,一般用於對原始資料返回一個Observable,這個Observable中資料型別可以是原來的,也可以是其他的

Observable<List<String>> query(String text); 
query("Hello, world!")  
    .flatMap(new Func1<List<String>, Observable<String>>() {  
        @Override  
        public Observable<String> call(List<String> urls) {  
            return Observable.from(urls);  
        }  
    })  
    .subscribe(url -> System.out.println(url));  
這裡對原始的List在flatMap裡面返回相應的一個個的Observable<String>以便在subscribe中直接使用一個個的URL,具體參考:http://blog.csdn.net/lzyzsd/article/details/44094895




這裡結合了retrofit  在flatMap中通過一個城市的str,返回一個Observable,這個Observable的引數是一些獲取到的天氣資訊結構WeatherData,這樣在後面subscrib中就可以對其進行處理了。