欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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

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

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)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

    Nacos-SpringBoot框架啟動(dòng)不加載bootstrap.yml的解決

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

    Java超詳細(xì)大文件分片上傳代碼

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

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

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

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

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

最新評(píng)論