一、map和flatMap都是接受一個函數做爲參數(Func1)
二、map函數只有一個參數,參數通常是Func1,Func1的<I,O>I,O模版分別爲輸入和輸出值的類型,實現Func1的call方法對I類型進行處理後返回O類型數據html
三、flatMap函數也只有一個參數,也是Func1,Func1的<I,O>I,O模版分別爲輸入和輸出值的類型,實現Func1的call方法對I類型進行處理後返回O類型數據,不過這裏O爲Observable類型ide
map實例 函數
這裏map裏面直接對參數處理url
flatMap實例:spa
這裏用 Observable.just(s)在裏面對參數進行處理並返回一個Observable,htm
上面兩個例子效果是同樣的,注意的就是參數,返回值不同,咱們再來看幾個:blog
這裏在map裏面返回了一個Observable,注意subscribe的參數也要變成了Observable<String>,不然會有異常<這麼寫主要是當時不太明白map和flatMap的區別,想看一下到底有什麼區別>it
Map通常用於對原始的參數進行加工處理,返回值仍是基本的類型,能夠在subscribe中使用(適用)的類型。class
flatMap通常用於輸出一個Observable,而其隨後的subscribe中的參數也跟Observable中的參數同樣,注意不是Observable,通常用於對原始數據返回一個Observable,這個Observable中數據類型能夠是原來的,也能夠是其餘的List
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裏面返回相應的一個個的
這裏結合了retrofit 在flatMap中經過一個城市的str,返回一個Observable的參數是一些獲取到的天氣信息結構WeatherData,這樣在後面subscrib中就能夠對其進行處理了。