gpt4 book ai didi

scala - scala 中 map 和 flatMap 的区别

转载 作者:行者123 更新时间:2023-12-03 20:48:58 27 4
gpt4 key购买 nike

map 和平面 map 有什么区别?正如我们可以做一个

1 to 5 map(c => println(c))

但不是

1 to 5 flatMap(c => println(c))

另一方面,这行得通

def h(i: Int) = if (i >= 2) Some(i) else None
1 to 5 flatMap(h)

我理解flatMap就是map和flatten,但是不确定什么时候可以用map,什么时候可以用flatMap。

最佳答案

让我们看看flatMap的签名.

def flatMap[B](f: (Int) ⇒ GenTraversableOnce[B]): TraversableOnce[B]

map的签名

def map[B](f: (A) ⇒ B): IndexedSeq[B]

可以看到f的结果类型必须是 GenTraversableOnce[B]对于 flatMap .但是f的结果类型没有限制对于 map .

println(x) 的结果类型是Unit结果类型为 x+2Int .由于两者都没有实现 GenTraversableOnce[B] , 你不能做 flatMap(x=>println(x))也不flatMap(x=>x+2) .

另一方面Some(i)None类型为 Option[Int] , 可以隐式转换为 Iterable[Int] source

Iterable的签名是

trait Iterable[+A] extends Traversable[A]

Traversable

trait Traversable[+A] .. with TraversableOnce[A]`

最后是 TraversableOnce

trait TraversableOnce[+A] extends GenTraversableOnce[A]

因此 Option[Int]工具 GenTraversableOnce[Int]所以你可以使用它作为 flatMap[Int] 的结果

关于scala - scala 中 map 和 flatMap 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45318264/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com