文档章节

map和flatMap

群星纪元
 群星纪元
发布于 2017/07/13 18:03
字数 478
阅读 11
收藏 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

群星纪元
粉丝 44
博文 456
码字总数 44497
作品 0
朝阳
高级程序员
私信 提问
实例验证spark开发中的map与flatmap的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_32265569/article/details/83450789 经常在map与flatmap中混淆,应该很多开发人员也会犯这个错误。 不...

独立小桥风满袖
2018/10/27
0
0
spark快速大数据分析之读书笔记-flatmap与map的区别

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

sucre
2016/02/23
4.6K
2
RxJava 中的map与flatMap

、map和flatMap都是接受一个函数作为参数(Func1) 2、map函数只有一个参数,参数一般是Func1,Func1的<I,O>I,O模版分别为输入和输出值的类型,实现Func1的call方法对I类型进行处理后返回O类型...

丁佳辉
2018/08/30
35
0
第十章 Scala 容器基础(十六):flatMap一个把flatten和map结合起来的方法

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

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

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

樱黯雨
2016/07/02
11
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS 7 搭建源码包搭建LNMP环境

1,安装epel源 yum install -y epel-release 2, 安装需要的软件 yum install -y gcc automake autoconf libtool make gcc-c++ glibc libxslt-devel \libjpeg libjpeg-devel libpng libpng......

hansonwong
37分钟前
5
0
基于 K8s 做应用发布的工具那么多, 阿里为啥选择灰姑娘般的 Tekton ?

作者 | 邓洪超,阿里云容器平台工程师, Kubernetes Operator 第二人,云原生应用标准交付与管理领域知名技术专家 导读:近年来,越来越多专门给 Kubernetes 做应用发布的工具开始缤纷呈现,...

阿里巴巴云原生
38分钟前
2
0
ZStack的普惠云计算到底是“随大流”还是真功夫?(转自社区)

作为一名深耕技术圈的“老男人”,也算是经历过云计算领域的成长。近些年云计算技术不断成熟,百行百业开始云上之路,各大云计算厂商开始逐渐意识到云计算是一项“普惠”技术。 我一直很看好...

ZStack社区版
39分钟前
3
0
一个备份MySQL数据库的简单Shell脚本

Shell脚本是我们写不同类型命令的一种脚本,这些命令在这一个文件中就可以执行。我们也可以逐一敲入命令手动执行。如果我们要使用shell脚本就必须在一开始把这些命令写到一个文本文件中,以后...

旺仔大战肥五花
44分钟前
2
0
TiDB Binlog 源码阅读系列文章(四)Pump server 介绍

作者: satoru 在 上篇文章 中,我们介绍了 TiDB 如何通过 Pump client 将 binlog 发往 Pump,本文将继续介绍 Pump server 的实现,对应的源码主要集中在 TiDB Binlog 仓库的 pump/server.go...

TiDB
48分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部