大家好,又见面了,我是你们的朋友全栈君。
前几天,用scala写了一个小程序。用到了flatMap函数,发现没有想象的那么简单,所以现在写下自己的体会,方便记忆。
由于本人也是初学者,如果内容有误,欢迎大家指出错误
文章目录
首先看看scala中Seq 的flatMap的函数定义
def flatMap[B](f: (A) ⇒ GenTraversableOnce[B]): Seq[B]
Builds a new collection by applying a function to all elements of this sequence and using the elements of the resulting collections.
意思大概就是将f这个函数应用到Seq里的所有元素,并将函数产生的集合里的元素取出来,组成一个新的集合。然后返回这个新的集合
举个栗子:
def getWords(lines: Seq[String]): Seq[String] = lines flatMap (line => line split " ")
val e = Seq("I love","coding scala")
getWords(e).foreach(println(_))
最后打印输出了
函数说明
getWords(e)先将e中的两个元素:”I love”,”coding scala”,变成Seq(”I”,”love”)和Seq(“coding”,”scala”),然后从那两个Seq中取得元素,组成一个新的Seq(“I”,”love”,”coding”,”scala”)。
所以flatMap就是将函数产出的集合串接在一起。
值得注意的是: flatMap最后返回的集合是以谁调用他为准的,比如Seq调用flatMap,返回的就是Seq。List就是返回List.
看代码:
// lettersOf will return a Seq[Char] of likely repeated letters, instead of a Set
def lettersOf(words: Seq[String]) = words flatMap (word => word.toSet)
// lettersOf will return a Set[Char], not a Set
def lettersOf(words: Seq[String]) = words.toSet flatMap (word => word.toSeq)
在知乎中看到的,觉得很有道理:
flatMap=map + flatten
在1中我们讲到flatMap是将函数产生的List[List[T]]串接成List[T] 而flatMap也可将Future[Future[T]]串接成Future[T] 这部分我也只知道一部分,等我更懂了再来发
OVER!
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/142964.html原文链接:https://javaforall.cn