zl程序教程

您现在的位置是:首页 >  后端

当前栏目

scala flatMap个人心得

scala 个人 心得 flatMap
2023-06-13 09:11:27 时间

大家好,又见面了,我是你们的朋友全栈君。

scala flatMap个人心得

前几天,用scala写了一个小程序。用到了flatMap函数,发现没有想象的那么简单,所以现在写下自己的体会,方便记忆。

由于本人也是初学者,如果内容有误,欢迎大家指出错误

flatMap

文章目录

  1. flatMap的常见用法
  2. flatMap和Map的区别
  3. flatMap与Future

1 . 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)

2 .flatMap和Map的区别

在知乎中看到的,觉得很有道理:

flatMap=map + flatten

3 .flatMap与Future

在1中我们讲到flatMap是将函数产生的List[List[T]]串接成List[T] 而flatMap也可将Future[Future[T]]串接成Future[T] 这部分我也只知道一部分,等我更懂了再来发

OVER!

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/142964.html原文链接:https://javaforall.cn