詳解scala中flatmap和map的區別

2021-08-20 15:13:06 字數 626 閱讀 8316

flatmap函式有一般的功能和map函式函式一樣,就是經過map函式之後多了乙個扁平化的過程。不過有個要求,傳入的函式在處理完後返回值必須是list(或seq),如果結果不是list(seq),那麼將出錯。也就是說,傳入的函式是有要求的 —— 返回值是seq才行。這樣,每個元素處理後返回乙個list,我們得到乙個包含list元素的list,flatmap自動將所有的內部list的元素取出來構成乙個list返回。

/*** 定義乙個人物件

* @param name       人名

* @param friends    朋友們

*/class people(val name: string, val friends: seq[string])

def main(args: array[string])

}輸出結果

map的形式

list(list(朋友1, 朋友2, 朋友3), list(朋友3, 朋友4, 朋友5))

flatmap的形式

list(朋友1, 朋友2, 朋友3, 朋友3, 朋友4, 朋友5)

說的明白一點就是map處理完之後會有小list

flatmap處理完之後,把這些小list拍平了,小list裡面所有的元素組成了乙個list

Scala之旅 函式詳解

1.scala的函式預設都有返回,unit類似c 裡面的void def funtion unit 以上的無返回值函式可以簡寫和c 類似 def funtion 2.基於簡潔的追求,scala可以偷懶的地方就 如下是帶返回值的3個等價函式 def adda x int int def addb x ...

Scala閉包詳解

閉包是乙個函式,返回值依賴於宣告在函式外部的乙個或多個變數。閉包通常來講可以簡單的認為是可以訪問乙個函式裡面區域性變數的另外乙個函式。如下面這段匿名的函式 val multiplier i int i 10函式體內有乙個變數 i,它作為函式的乙個引數。如下面的另一段 val multiplier i...

scala隱式詳解

使用implicit關鍵字 implicit val rate float 0.05f implicit def float2int float float 呼叫方法時,如果未輸入隱式引數且 所處作用域中存在型別相容的隱式值,該值會從作用域中調出並被使用,反之,系統將會丟擲編譯器錯誤。def cal...