RxJava 中的map與flatMap

、map和flatMap都是接受一個函數做爲參數(Func1)
二、map函數只有一個參數,參數通常是Func1,Func1的<I,O>I,O模版分別爲輸入和輸出值的類型,實現Func1的call方法對I類型進行處理後返回O類型數據java

三、flatMap函數也只有一個參數,也是Func1,Func1的<I,O>I,O模版分別爲輸入和輸出值的類型,實現Func1的call方法對I類型進行處理後返回O類型數據,不過這裏O爲Observable類型app

 

map實例       ide

         

這裏map裏面直接對參數處理函數

 

flatMap實例:url

 

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

 

上面兩個例子效果是同樣的,注意的就是參數,返回值不同,咱們再來看幾個:.net

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

 

Map通常用於對原始的參數進行加工處理,返回值仍是基本的類型,能夠在subscribe中使用(適用)的類型。blog

flatMap通常用於輸出一個Observable,而其隨後的subscribe中的參數也跟Observable中的參數同樣,注意不是Observable,通常用於對原始數據返回一個Observable,這個Observable中數據類型能夠是原來的,也能夠是其餘的ip

 

[java] view plain copy

  1. Observable<List<String>> query(String text);   
  2. query(」Hello, world!」)    
  3.     .flatMap(new Func1<List<String>, Observable<String>>() {    
  4.         @Override    
  5.         public Observable<String> call(List<String> urls) {    
  6.             return Observable.from(urls);    
  7.         }    
  8.     })    
  9.     .subscribe(url -> System.out.println(url));    
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

這裏對原始的List在flatMap裏面返回相應的一個個的Observable<String>以便在subscribe中直接使用一個個的URL,具體參考:http://blog.csdn.net/lzyzsd/article/details/44094895

 


 

這裏結合了retrofit  在flatMap中經過一個城市的str,返回一個Observable,這個Observable的參數是一些獲取到的天氣信息結構WeatherData,這樣在後面subscrib中就能夠對其進行處理了。

相關文章
相關標籤/搜索