文档章节

map和flatMap

火力全開
 火力全開
发布于 2017/07/13 18:03
字数 478
阅读 11
收藏 0
点赞 0
评论 0

在函数式语言中,函数作为一等公民,可以在任何地方定义,在函数内或函数外,可以作为函数的参数和返回值,可以对函数进行组合。由于命令式编程语言也可以通过类似函数指针的方式来实现高阶函数,函数式的最主要的好处主要是不可变性带来的。没有可变的状态,函数就是引用透明(Referential transparency)的和没有副作用(No Side Effect)。 
任何一种函数式语言中,都有map函数与faltMap这两个函数,比如Python虽然不是纯函数式语言,也有这两个函数。再比如在jdk1.8之后,也加入了Lambda表达式,自然也支持map函数。 
现在简单说说Scala中这两个函数的用法。有一种观点认为将map和flatMap说成scala函数机制的核心都不为过分,其实是有一定道理的。因为实际中我们使用最多的场景就是对数据进行map操作或者flatMap操作。map函数的用法,顾名思义,将一个函数传入map中,然后利用传入的这个函数,将集合中的每个元素处理,并将处理后的结果返回。而flatMap与map唯一不一样的地方就是传入的函数在处理完后返回值必须是List,其实这也不难理解,既然是flatMap,那除了map以外必然还有flat的操作,所以需要返回值是List才能执行flat这一步。 
废话不多说,看一个小例子就明白用法了。

object collection_t1 {

  def flatMap1(): Unit = {
    val li = List(1,2,3)
    val res = li.flatMap(x => x match {
      case 3 => List('a','b')
      case _ => List(x*2)
    })
    println(res)
  }

  def map1(): Unit = {
    val li = List(1,2,3)
    val res = li.map(x => x match {
      case 3 => List('a','b')
      case _ => x*2
    })
    println(res)
  }

  def main(args: Array[String]): Unit = {
    flatMap1()
    map1()
  }
}

 

本文转载自:http://blog.csdn.net/bitcarmanlee/article/details/52983607

火力全開
粉丝 19
博文 203
码字总数 18086
作品 0
卢湾
高级程序员
spark快速大数据分析之读书笔记-flatmap与map的区别

以前总是分不清楚spark中flatmap和map的区别,现在弄明白了,总结分享给大家,先看看flatmap和map的定义。 map()是将函数用于RDD中的每个元素,将返回值构成新的RDD。 flatmap()是将函数应用...

sucre
2016/02/23
4K
2
第十章 Scala 容器基础(十六):flatMap一个把flatten和map结合起来的方法

Problem 当你第一次来到Scala世界的时候,flatMap放方法看起来是很特别的,所以你需要理解他是如何工作的,还有它是应用在什么地方的。 Solution 在你调用map方法后紧接着调用flatten方法的情...

阿拉德大陆的魔法师
2016/04/13
966
0
swift 数组高阶使用(二)

swift 数组高阶使用(二) 这次主要讲解swift中map、flatmap、filter、reduce对数组的操作,你会发现,你的数组变得非常简单,上代码: map 被一个数组调用,并且可以接受一个闭包,返回原数...

樱黯雨
2016/07/02
9
0
RxJava从入门到不离不弃(三)——转换操作符

前面两篇文章中我们介绍了RxJava的一些基本概念和RxJava最简单的用法。从这一篇开始,我们开始聊聊RxJava中的操作符Operators。 RxJava中的操作符主要分成了三类: 转换类操作符(map flatMa...

Android机动车
今天
0
0
Traversing Mapping Filtering Folding Reducing

Traversing Mapping Filtering Folding Reducing Traversal 使用 foreach 遍历集合。foreach 是从特质 Iterable 混入而来的。 The signature of foreach is the following: trait Iterabl......

秋风醉了
2015/04/29
0
0
函数式编程Monad,Functor,Applicative

图解Moand:http://www.ruanyifeng.com/blog/2015/07/monad.html :对自己解包,然后应用到一个闭包上,这个闭包:接受一个「未封装的值」,返回一个「封装后的值」。 :对自己解包,然后应用...

樗同学
2016/07/13
22
0
【Java8】Optional

Optional Optional简述 按照字面意思的理解,应该可选的意思。一开始我还以为是类似python里面的默认参数用法呢,结果语义是指某个值可能有也可能没有(null)。感觉名字取得不是很直观。。我...

xesam
2014/12/03
0
0
scala-常用函数介绍

欢迎大家关注: scala工具库 ,里面包含各种库的测试用例和使用说明文档 模式匹配 使用用模式匹配实现斐波那契 元组tuple 元组可以保存不同类型的值,不能通过名称获取字段,而是使用位置下标...

jacksu
2015/11/25
88
0
reactor3 flux的map与flatMap的区别

序 本文主要研究一下flux的map与flatMap的区别 map 这里头的map是纯元素转换 输出 flatMap 这里的flatMap,将元素转为Mono或Flux,转换操作里头还可以进行异步操作 输出 小结 flatMap的转换F...

go4it
02/09
0
0
《数据算法Hadoop/Spark》读书笔记2--map与flatMap、mapPartitions对比

本章知识 spark中的共同点为中的每一项均为RDD 1 与对比 图解如下 2 与对比 3 实验 测试输入数据 3.1 map 打印结果 3.2 flatMap 的结果多行证明迭代的每一项为一个RDD 3.3 mapPartitions 4 附...

answer100answer
04/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

spring boot中swagger2使用

1.pom.xml中添加 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version>......

说回答
10分钟前
0
0
tomcat虚拟路径的几种配置方法

tomcat虚拟路径的几种配置方法 一般我们都是直接引用webapps下面的web项目,如果我们要部署一个在其它地方的WEB项目,这就要在TOMCAT中设置虚拟路径了,Tomcat的加载web顺序是先加载 $Tomcat_ho...

Helios51
22分钟前
1
0
Mac 安装jupyter notebook的过程

MAC台式机 python:mac下自带Python 2.7.10 1.先升级了pip安装工具:sudo python -m pip install --upgrade --force pip 2.安装setuptools 工具:sudo pip install setuptools==33.1.1 3.安装......

火力全開
28分钟前
0
0
导航守卫解释与例子

“导航”表示路由正在发生改变。 正如其名,vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的。 记住...

tianyawhl
28分钟前
0
0
Java日志框架-logback配置文件多环境日志配置(开发、测试、生产)(原始解决方法)

说明:这种方式应该算是最通用的,原理是通过判断标签实现。 <!-- if-then form --> <if condition="some conditional expression"> <then> ... </then> </if> ......

浮躁的码农
42分钟前
1
0
FTP传输时的两种登录方式和区别

登录方式 匿名登录 用户名为: anonymous。 密码为:任何合法 email 地址。 授权登录 用户名为:用户在远程系统中的用户帐号。 密码为:用户在远程系统中的用户密码。 区别 匿名登录 只能访问...

寰宇01
43分钟前
0
0
plsql developer 配置监听(不安装oracle客户端)

plsql developer 配置监听(不安装oracle客户端)

微小宝
50分钟前
2
0
数据库(分库分表)中间件对比

本人的宗旨就是,能copy的,绝对不手写。 分区:对业务透明,分区只不过把存放数据的文件分成了许多小块,例如mysql中的一张表对应三个文件.MYD,MYI,frm。 根据一定的规则把数据文件(MYD)和索...

奔跑吧代码
54分钟前
2
0
Netty与Reactor模式详解

在学习Reactor模式之前,我们需要对“I/O的四种模型”以及“什么是I/O多路复用”进行简单的介绍,因为Reactor是一个使用了同步非阻塞的I/O多路复用机制的模式。 I/O的四种模型 I/0 操作 主要...

hutaishi
今天
1
0
【2018.07.16学习笔记】【linux高级知识 20.16-20.19】

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析

lgsxp
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部