RxJava 中的map與flatMap
阿新 • • 發佈:2019-01-01
1、map和flatMap都是接受一個函式作為引數(Func1)
2、map函式只有一個引數,引數一般是Func1,Func1的<I,O>I,O模版分別為輸入和輸出值的型別,實現Func1的call方法對I型別進行處理後返回O型別資料
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中資料型別可以是原來的,也可以是其他的
這裡對原始的List在flatMap裡面返回相應的一個個的Observable<String>以便在subscribe中直接使用一個個的URL,具體參考:http://blog.csdn.net/lzyzsd/article/details/44094895Observable<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));
這裡結合了retrofit 在flatMap中通過一個城市的str,返回一個Observable,這個Observable的引數是一些獲取到的天氣資訊結構WeatherData,這樣在後面subscrib中就可以對其進行處理了。