您好,登錄后才能下訂單哦!
這篇文章主要講解了“scala中map與flatMap的區別是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“scala中map與flatMap的區別是什么”吧!
在函數式語言中,函數作為一等公民,可以在任何地方定義,在函數內或函數外,可以作為函數的參數和返回值,可以對函數進行組合。由于命令式編程語言也可以通過類似函數指針的方式來實現高階函數,函數式的最主要的好處主要是不可變性帶來的。沒有可變的狀態,函數就是引用透明(Referential transparency)的和沒有副作用(No Side Effect)。
任何一種函數式語言中,都有map函數與faltMap這兩個函數,比如python雖然不是純函數式語言,也有這兩個函數。再比如在jdk1.8之后,也加入了Lambda表達式,自然也支持map函數。
現在簡單說說scala中這兩個函數的用法。有一種觀點認為將map和flatMap說成Scala函數機制的核心都不為過分,其實是有一定道理的。因為實際中我們使用最多的場景就是對數據進行map操作或者flatMap操作。map函數的用法,顧名思義,將一個函數傳入map中,然后利用傳入的這個函數,將集合中的每個元素處理,并將處理后的結果返回。而flatMap與map唯一不一樣的地方就是傳入的函數在處理完后返回值必須是List,其實這也不難理解,既然是flatMap,那除了map以外必然還有flat的操作,所以需要返回值是List才能執行flat這一步。
總結:1. map會將每一條輸入映射為一個新對象。{蘋果,梨子}.map(去皮) = {去皮蘋果,去皮梨子} 其中: “去皮”函數的類型為:A => B
2.flatMap包含兩個操作:會將每一個輸入對象輸入映射為一個新集合,然后把這些新集合連成一個大集合。 {蘋果,梨子}.flatMap(切碎) = {蘋果碎片1,蘋果碎片2,梨子碎片1,梨子碎片2} 其中: “切碎”函數的類型為: 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))
感謝各位的閱讀,以上就是“scala中map與flatMap的區別是什么”的內容了,經過本文的學習后,相信大家對scala中map與flatMap的區別是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。