博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转)scala中map与flatMap浅析
阅读量:7156 次
发布时间:2019-06-29

本文共 1067 字,大约阅读时间需要 3 分钟。

在函数式语言中,函数作为一等公民,可以在任何地方定义,在函数内或函数外,可以作为函数的参数和返回值,可以对函数进行组合。由于命令式编程语言也可以通过类似函数指针的方式来实现高阶函数,函数式的最主要的好处主要是不可变性带来的。没有可变的状态,函数就是引用透明(Referential transparency)的和没有副作用(No Side Effect)。 

任何一种函数式语言中,都有map函数与faltMap这两个函数,比如虽然不是纯函数式语言,也有这两个函数。再比如在jdk1.8之后,也加入了Lambda表达式,自然也支持map函数。 
现在简单说说中这两个函数的用法。有一种观点认为将map和flatMap说成函数机制的核心都不为过分,其实是有一定道理的。因为实际中我们使用最多的场景就是对数据进行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()  }}

最后输出为:

List(2, 4, a, b)

List(2, 4, List(a, b))

转载于:https://www.cnblogs.com/guazi/p/7054301.html

你可能感兴趣的文章
amazeui学习笔记--css(HTML元素1)--按钮Button
查看>>
P1569 [USACO11FEB]属牛的抗议Generic Cow Prote…
查看>>
P1005 矩阵取数游戏
查看>>
线段树
查看>>
用 Flask 来写个轻博客 (18) — 使用工厂模式来生成应用对象
查看>>
Libvirt Live Migration 与 Pre-Copy 实现原理
查看>>
PHP成生若干位防伪码的方法
查看>>
全文搜索引擎 Elasticsearch (三)logstash-input-jdbc同步数据 到elasticsearch
查看>>
React:List and key
查看>>
C#的百度地图开发(五)IP定位
查看>>
Firefox 打开谷歌页面提示“检测到该服务器正在将此地址的请求循环重定向”的完美解决方法 (转)...
查看>>
Hyper-v虚拟化
查看>>
28335外部中断的简单介绍和配置
查看>>
1+2+...+n>=max问题的求解
查看>>
HDU2296 Ring [AC自动机+DP]
查看>>
Linux Shell编程,使用随机数
查看>>
下半部和推后执行的工作
查看>>
Python简单的用户交互
查看>>
第一天开技术博客
查看>>
Hibernate实现有两种配置,xml配置与注释配置
查看>>