scala中map与flatMap浅析

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

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

项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

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

将代码run起来,最后输出为:

List(2, 4, a, b)
List(2, 4, List(a, b))
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135953.html原文链接:https://javaforall.net

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


相关推荐

  • c++的条件运算符_条件运算符都有哪些

    c++的条件运算符_条件运算符都有哪些一、运算符1.条件运算符(?:)是C语言中唯一的一个三目运算符,它是对第一个表达式作真/假检测,然后根据结果返回另外两个表达式中的一个。<表达式1>?<表达式2>:&a

    2022年9月27日
  • Callable和Runnable的区别「建议收藏」

    classcimplementsCallable<String>{ @Override publicStringcall()throwsException{ returnnull; } } classrimplementsRunnable{ @Override publicvoidrun(){ } }相同点:…

    2022年4月17日
  • opc服务器不显示目录,opc客户端搜不到opc服务器

    opc服务器不显示目录,opc客户端搜不到opc服务器opc客户端搜不到opc服务器内容精选换一换ELB可以针对客户访问的业务为访问者提供个性化的管理策略,制定策略之前需要获取来访者的真实IP。TOA内核模块主要用来获取ELB转化过的访问者真实IP地址(仅支持IPv4),该插件安装在ELB后端服务器。本文档仅适用于四层(TCP协议)服务,当客户需要在操作系统中编译TOA内核模块时,可参考本文档进行配置。Linux内核版本为2.6.32块存储调优主要…

    2022年6月20日
  • Micron(美光)内存颗粒的命名规则,7lk17d9PTK,MT29F2G08ABAEA(矿机自带)

    Micron(美光)内存颗粒的命名规则,7lk17d9PTK,MT29F2G08ABAEA(矿机自带)三四十买了一个矿机主板,ddr3的芯片和flash的型号认不全,找了一些资料,如下1.DDR3芯片的识别ZYNQ7000系列ddr最多支持1G,这两个拼一起就是500M一半的样子我们随便找一个Micron的DDR3或者SPINANDFLASH,会发现丝印不是具体型号,真他妈奇怪!!!!!如:看了都有不知道什么型号的DDR芯片以前自己懵剩剩的,还好公司的硬件工程师帮我解答了多年以来的困惑:https://www.micron.com/support/tools-and-utilities

    2022年6月22日
  • linux vim中取消底色

    linux vim中取消底色

    2022年2月23日
  • html表格内容居中对齐_word里表格怎么居中

    html表格内容居中对齐_word里表格怎么居中加上样式如:margin:0auto;<tablestyle=”margin:0auto;”><tr><td><span>账号:</span></td><td><inputtype=”text”v-model=’user’/></td></tr><tr><td>…

    2022年9月18日

发表回复

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

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