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)
上一篇 2022年5月4日 上午8:20
下一篇 2022年5月4日 上午8:20


相关推荐

  • datadog的数据流转

    datadog的数据流转datadog 是个典型的类 zabbix 的 agent 其主要数据流转如下 数据类型有三种 一个是 metric 一个是 server check 一个是 event 分别存到指标数据库 做服务状态标记和事件报警用 但这里面有些坑 collectd 的数据来源有两个 一个是是 check

    2026年2月4日
    2
  • for循环嵌套的两种用法

    for循环嵌套的两种用法主要有两种类型的 for 循环嵌套 下面来介绍这两种类型循环嵌套的用法以及事例 一 内外循环独立进行 includevoidm inti j chara 5 for i 0 i5 i for j 0 j5 j printf c a j printf n

    2026年3月26日
    2
  • 面向对象编程与面向过程编程的基本区别

    面向对象编程与面向过程编程的基本区别面向对象 面向对象编程 ObjectOrient 面向对象程序设计 的主要思想是把构成问题的各个事务分解成各个对象 建立对象的目的不是为了完成一个步骤 而是为了描叙一个事物在整个解决问题的步骤中的行为 面向对象程序设计中的概念主要包括 对象 类 数据抽象 继承 动态绑定 数据封装 多态性 消息传递 通过这些概念面向对象的思想得到了具体的体现 面向对象是一种解决问题的思想类就是具备某些共同特征的实体的集合 它是一种抽象的数据类型 它是对所具有相同特征实体的抽象 在面向对象的程序

    2026年3月20日
    3
  • 锋利的jquery ——学习笔记

    锋利的jquery ——学习笔记1 代码收集 在一个 id 为 table 的表格的 tbody 中 如果每行最后一列中的 checkbox 没有被禁用 则把这行的背景设置为红色 table gt tbody gt tr has td last has checkbox enabled css background red nbsp 先引入 jquery 1 5 1 min js 然后引入自

    2026年3月19日
    1
  • altas, ajax应用

    altas, ajax应用nbsp ajax 应该在今年业界火了一把 微软也不会放弃 altas 是基于 ASP NET 的 ajax 框架 接下来 介绍一下 altas 的简单应用 以后可能会多做一下这方面的应用 下面的是一个 ajax 原理的一个 DEMO 比较简单 页面每隔 5 秒 刷新 Receive asp 的内容 并显示在当前页面中 这里先开个头 http www w3 org TR xhtml1 DTD xhtml1 tr

    2026年3月17日
    2
  • 程序员要不要去外包外派公司上班_程序员去外包是不是就废了

    程序员要不要去外包外派公司上班_程序员去外包是不是就废了总结一下外包外派公司的特点,要不要去,你自然就知道了。1.不管是外包还是外派,你的工作地点都不会固定的。都会去甲方的公司去工作,这个项目完事了,你就换到另一个甲方,另一个工作地方了。需要出差,需要驻场等等,工作场所非常不固定。2.面试的时候各种承诺,转正的时候,各种克扣。3.五险一金不会给你按照基本工资交,而是按照最低工资标准交。4.技术方面,可能会让你弄很多你不熟悉的技…

    2022年9月30日
    5

发表回复

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

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