亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺析scala中map與flatMap的區(qū)別

 更新時間:2019年06月16日 16:07:08   作者:流浪的小椅  
這篇文章主要介紹了淺析scala中map與flatMap的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在函數(shù)式語言中,函數(shù)作為一等公民,可以在任何地方定義,在函數(shù)內(nèi)或函數(shù)外,可以作為函數(shù)的參數(shù)和返回值,可以對函數(shù)進行組合。由于命令式編程語言也可以通過類似函數(shù)指針的方式來實現(xiàn)高階函數(shù),函數(shù)式的最主要的好處主要是不可變性帶來的。沒有可變的狀態(tài),函數(shù)就是引用透明(Referential transparency)的和沒有副作用(No Side Effect)。

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

現(xiàn)在簡單說說scala中這兩個函數(shù)的用法。有一種觀點認為將map和flatMap說成Scala函數(shù)機制的核心都不為過分,其實是有一定道理的。因為實際中我們使用最多的場景就是對數(shù)據(jù)進行map操作或者flatMap操作。map函數(shù)的用法,顧名思義,將一個函數(shù)傳入map中,然后利用傳入的這個函數(shù),將集合中的每個元素處理,并將處理后的結(jié)果返回。而flatMap與map唯一不一樣的地方就是傳入的函數(shù)在處理完后返回值必須是List,其實這也不難理解,既然是flatMap,那除了map以外必然還有flat的操作,所以需要返回值是List才能執(zhí)行flat這一步。

總結(jié):1. map會將每一條輸入映射為一個新對象。{蘋果,梨子}.map(去皮) = {去皮蘋果,去皮梨子} 其中: “去皮”函數(shù)的類型為:A => B

2.flatMap包含兩個操作:會將每一個輸入對象輸入映射為一個新集合,然后把這些新集合連成一個大集合。 {蘋果,梨子}.flatMap(切碎) = {蘋果碎片1,蘋果碎片2,梨子碎片1,梨子碎片2} 其中: “切碎”函數(shù)的類型為: A => List<B>

廢話不多說,看一個小例子就明白用法了。

object collection_t1 {
 
 def flatMap1(): Unit = {
  val li = List(1,2,3)
  val res = li.flatMap(x => x match {
   case 3 => List('a','b')
   case _ => List(x*2)
  })
  println(res)
 }
 
 def map1(): Unit = {
  val li = List(1,2,3)
  val res = li.map(x => x match {
   case 3 => List('a','b')
   case _ => x*2
  })
  println(res)
 }
 
 def main(args: Array[String]): Unit = {
  flatMap1()
  map1()
 }
}

將代碼run起來,最后輸出為:

List(2, 4, a, b)
List(2, 4, List(a, b))

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于JDK8升級17及springboot?2.x升級3.x詳細指南

    關(guān)于JDK8升級17及springboot?2.x升級3.x詳細指南

    這篇文章主要介紹了關(guān)于JDK8升級17及springboot?2.x升級3.x的相關(guān)資料,還討論了JPA包路徑從javax改為jakarta,以及Spring?Boot版本升級和Redis配置調(diào)整等,需要的朋友可以參考下
    2025-01-01
  • Spring Boot ActiveMQ發(fā)布/訂閱消息模式原理解析

    Spring Boot ActiveMQ發(fā)布/訂閱消息模式原理解析

    這篇文章主要介紹了Spring Boot ActiveMQ發(fā)布/訂閱消息模式原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot中各個層級結(jié)構(gòu)的具體實現(xiàn)

    SpringBoot中各個層級結(jié)構(gòu)的具體實現(xiàn)

    在SpringBoot項目中,常常會把代碼文件放入不同的包中,本文主要介紹了SpringBoot中各個層級結(jié)構(gòu)的具體實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • java如何保證多個線程按一定順序執(zhí)行

    java如何保證多個線程按一定順序執(zhí)行

    這篇文章主要介紹了java如何保證多個線程按一定順序執(zhí)行問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • java/word+fusionchart生成圖表深入分析

    java/word+fusionchart生成圖表深入分析

    本文將以java/word+fusionchart生成圖表問題深入解析,有興趣的朋友可以參考下
    2012-11-11
  • JVM原理之完整的一次GC流程解讀

    JVM原理之完整的一次GC流程解讀

    這篇文章主要介紹了JVM原理之完整的一次GC流程解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Nacos-SpringBoot框架啟動不加載bootstrap.yml的解決

    Nacos-SpringBoot框架啟動不加載bootstrap.yml的解決

    這篇文章主要介紹了Nacos-SpringBoot框架啟動不加載bootstrap.yml的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java超詳細大文件分片上傳代碼

    Java超詳細大文件分片上傳代碼

    文件上傳是一個很常見的功能。在項目開發(fā)過程中,我們通常都會使用一些成熟的上傳組件來實現(xiàn)對應(yīng)的功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧<BR>
    2022-06-06
  • 基于Tomcat7、Java、WebSocket的服務(wù)器推送聊天室實例

    基于Tomcat7、Java、WebSocket的服務(wù)器推送聊天室實例

    HTML5 WebSocket實現(xiàn)了服務(wù)器與瀏覽器的雙向通訊,本篇文章主要介紹了基于Tomcat7、Java、WebSocket的服務(wù)器推送聊天室實例,具有一定的參考價值,有興趣的可以了解一下。
    2016-12-12
  • Java關(guān)鍵字instanceof的兩種用法實例

    Java關(guān)鍵字instanceof的兩種用法實例

    這篇文章主要介紹了Java關(guān)鍵字instanceof的兩種用法實例,本文給出了instanceof關(guān)鍵字用于判斷一個引用類型變量所指向的對象是否是一個類(或接口、抽象類、父類)及用于數(shù)組比較,需要的朋友可以參考下
    2015-03-03

最新評論