文档章节

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

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

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

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

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

丁佳辉
08/30
0
0
第十章 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机动车
07/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Centos7安装docker和docker-compose

docker-安装 yum update yum install -y docker-engine docker-compose pip install -U docker-compose...

落叶清风
17分钟前
0
0
7个Python实战项目代码,让你感受下大神是如何起飞的!

关于Python有一句名言:不要重复造轮子。 但是问题有三个: 1、你不知道已经有哪些轮子已经造好了,哪个适合你用。有名有姓的的著名轮子就400多个,更别说没名没姓自己在制造中的轮子。 2、确...

糖宝lsh
17分钟前
0
0
【随记】Maven 与mysql 版本(maven mysql 5.1.38用的最多)

MySQL Connector/J 我的电脑mysql版本为5.7.20-log maven pom.xml 依赖可用5.1.38 pom.xml依赖代码 $加<properties>变量名的实例代码 <properties><!-- data --><mysql-connector-ja......

颖伙虫
20分钟前
0
0
观察者模式

意图: 在对象的内部状态发生变化时,自动通知外部对象进行响应。 构成 被观察者:内部状态有可能被改变,而且又需要通知外部的对象。 观察者:需要对内部状态的改变做出响应的对象。 Java实...

noob_fly
27分钟前
0
0
设计模式之 MVC

MVC 是 模块化思想或者分层思想的实践。 当我们设计一个Web应用的时候,我们的业务流是,读取数据库中的数据,进行逻辑处理,渲染到页面;如果是交互型的页面,那么页面有输入或者事件发生的...

backbye
28分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部