it培訓中map和flatmap的共同點和區別
發布于:2019-05-24   作者:admin   瀏覽:38次

  在函數式語言中,函數作為一等公民,可以在任何地方定義,在函數內或函數外,可以作為函數的參數和返回值,可以對函數進行組合。由于命令式編程語言也可以通過類似函數指針的方式來實現高階函數,函數式的最主要的好處主要是不可變性帶來的。沒有可變的狀態,函數就是引用透明(Referentialtransparency)的和沒有副作用(NoSideEffect)。it培訓的小編就來為大家介紹介紹。

  任何一種函數式語言中,都有map函數與faltMap這兩個函數,比如python雖然不是純函數式語言,也有這兩個函數。再比如在jdk1.8之后,也加入了Lambda表達式,自然也支持map函數。

it培訓中map和flatmap的共同點和區別

  map和faltMap的共同點和區別

  1、共同點

  都是依賴FuncX(入參,返回值)進行轉換(將一個類型依據程序邏輯轉換成另一種類型,根據入參和返回值)

  都能在轉換后直接被subscribe

  2、區別

  map返回的是結果集,flatmap返回的是包含結果集的Observable(返回結果不同)

  map被訂閱時每傳遞一個事件執行一次onNext方法,flatmap多用于多對多,一對多,再被轉化為多個時,一般利用from/just進行一一分發,被訂閱時將所有數據傳遞完畢匯總到一個Observable然后一一執行onNext方法(執行順序不同)>>>>(如單純用于一對一轉換則和map相同)

  map只能單一轉換,單一只的是只能一對一進行轉換,指一個對象可以轉化為另一個對象但是不能轉換成對象數組(map返回結果集不能直接使用from/just再次進行事件分發,一旦轉換成對象數組的話,再處理集合/數組的結果時需要利用for一一遍歷取出,而使用RxJava就是為了剔除這樣的嵌套結構,使得整體的邏輯性更強。)

  flatmap既可以單一轉換也可以一對多/多對多轉換,flatmap要求返回Observable,因此可以再內部進行from/just的再次事件分發,一一取出單一對象(轉換對象的能力不同)

  map函數的用法,顧名思義,將一個函數傳入map中,然后利用傳入的這個函數,將集合中的每個元素處理,并將處理后的結果返回。而flatMap與map唯一不一樣的地方就是傳入的函數在處理完后返回值必須是List,其實這也不難理解,既然是flatMap,那除了map以外必然還有flat的操作,所以需要返回值是List才能執行flat這一步。