scala flatMap个人心得

scala flatMap个人心得scalaflatMap个人心得前几天,用scala写了一个小程序。用到了flatMap函数,发现没有想象的那么简单,所以现在写下自己的体会,方便记忆。由于本人也是初学者,如果内容有误,欢迎大家指出错误内容:flatMap的常见用法flatMap和Map的区别flatMap与Future

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

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.net/142964.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Vcl控件详解_c++控件

    Vcl控件详解_c++控件TTabControl属性 DisplayRect:只定该控件客户区的一个矩形HotTrack:设置当鼠标经过页标签时,它的字是否有变化。如果为True,是字会变成蓝色Images:为每个页标签添加一个图片MultiLine:如果总页标签的长度大于该控件的宽度时,是否允许多行显示MultiSelect:是否允许多选页标签。该属性只有当Style为tsFlatButtons或

    2022年9月25日
    0
  • java8 stream流操作的flatMap(流的扁平化)

    java8 stream流操作的flatMap(流的扁平化)flatMap的用法和含义住要通过一个案例来讲解,案例:对给定单词列表["Hello","World"],你想返回列表["H","e","l","o","W","r","d"]第一种方式String[]words=newString[]{"Hello","World&quot

    2022年6月2日
    38
  • mysql fsync_用一分钟了解: fsync这个系统调用!

    mysql fsync_用一分钟了解: fsync这个系统调用!1前言不要诧异在MySQL专题中突然插入fsync系统调用,因为马上就要和大家分享MySQL的undolog、redolog、binlog了,在分享这些文章的时候会经常说fsync这个名词,所以提前来看下。2缓冲传统的UNIX实现的内核中都设置有缓冲区或者页面高速缓存,大多数磁盘IO都是通过缓冲写的。当你想将数据write进文件时,内核通常会将该数据复制到其中一个缓冲区中,如果该缓冲没被写满…

    2022年5月31日
    43
  • Windows7在自由的虚拟机(微软官方虚拟机)

    Windows7在自由的虚拟机(微软官方虚拟机)

    2021年12月17日
    49
  • wireshark过滤规则及使用方法

    wireshark过滤规则及使用方法Wireshark基本语法,基本使用方法,及包过滤规则:1.过滤IP,如来源IP或者目标IP等于某个IP例子:ip.src eq 192.168.1.107 or ip.dst eq 192.168.1.107或者ip.addr eq 192.168.1.107 // 都能显示来源IP和目标IPLinux上运行的wireshark图形窗口截图示例,

    2022年7月13日
    19
  • ubuntu解压命令

    ubuntu解压命令本文转自:https://www.jb51.net/article/112207.htm 本文主要介绍的是在在Ubuntu下同下各种压缩与解压的方式,压缩与解压的重要性这里就不多说,我们下面直接来看详细的介绍吧。一、.tar解包:tarxvfFileName.tar打包:tarcvfFileName.tarDirName(注:tar是打包,不是压缩!)二、.g…

    2022年5月17日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号