我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【Kotlin】函数式编程 ① ( 函数式编程简介 | 高阶函数 | 函数类别 | Transform 变换函数 | 过滤函数 | 合并函数 | map 变换函数 | flatMap 变换函数 )

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【Kotlin】函数式编程 ① ( 函数式编程简介 | 高阶函数 | 函数类别 | Transform 变换函数 | 过滤函数 | 合并函数 | map 变换函数 | flatMap 变换函数 )







1、编程范式


编程范式 指的是 使用某种编程语言的 编程套路编程习惯 ;

使用 Java 等高级语言进行的编程 , 编程范式 一般都是 面向对象编程 ;

与 面向对象编程 同等级的另外一种 编程范式函数式编程 , 函数式编程 不依赖于 指定的语言 , 所有的编程语言都可以使用 函数式编程范式 ;


2、高阶函数


介绍 函数式编程 前先引入 高阶函数 的概念 , 高阶函数指的是 使用 函数类型 作为 参数 或 返回值 的函数 ;

也就是说 高阶函数参数 或 返回值Lambda 表达式 / 匿名函数 / 闭包 ( 三者是相同的概念 ) ;


3、函数式编程


函数式编程 主要依赖于 高阶函数 返回 的数据 , 调用 返回值 的其它函数 , 可以构建出 链式操作 , 处理复杂问题 ;

函数式编程 没有准确的 概念 , 目前使用了 链式调用 , 使用了大量的 Lambda 表达式作为 参数 或 返回值高阶函数 , 就是使用了 函数式编程 范式 ;


4、前端开发技术


移动端开发前端开发 使用的技术 趋于相同 , 在前端开发 ES6 ( JavaScript 标准 ECMAScript 6.0 ) 中 , 也使用 函数式编程 ;







函数式编程 中 涉及到 三种 函数类别 :

  • 变换 Transform
  • 过滤 Filter
  • 合并 Combine

在 函数式编程 中 , 不同类型 的 函数 可以 组合起来 , 构建复杂的操作 ;


示例 : 上述 变换 , 过滤 , 合并 三种函数类型 , 一般都是 针对 集合 设计 的 , 如 Map 集合 , 进行上述操作后 , 最终得到一个结果 ;







变换函数函数式编程 中的一种函数类型 ,

变换函数 的主要操作 是 遍历 集合中的元素 ,

变换函数 的 接收的参数 是 匿名函数 , 又称为 " 变换器函数 " , 该函数可以 对 集合中的 每个元素 进行变换操作 ,

变换完成后 , 再 将修改后的集合返回 , 然后以 供 函数式编程 调用链 中的后面的函数调用 ;

注意 : 上述操作 , 原来的集合是不改变的 ;


常见的 变换函数 :

  • map 函数 , 函数原型如下 , 该函数定义在 _Collections.kt 脚本中 ;
public inline fun <T, R> Iterable<T>.map(transform: (T) -> R): List<R> {    return mapTo(ArrayList<R>(collectionSizeOrDefault(10)), transform)}
  • flatMap 函数 ; , 函数原型如下 , 该函数定义在 _Collections.kt 脚本中 ;
public inline fun <T, R> Iterable<T>.flatMap(transform: (T) -> Iterable<R>): List<R> {    return flatMapTo(ArrayList<R>(), transform)}







1、map 函数原型分析


分析 map 函数的原型 :

public inline fun <T, R> Iterable<T>.map(transform: (T) -> R): List<R>

map 函数 Iterable 集合类型 扩展函数 , 该扩展函数 接收的参数 是 (T) -> R 类型 泛型扩展匿名函数 ,

transform: (T) -> R 泛型扩展匿名函数 接收 T 类型参数 , 返回 R 泛型类型的 参数 ,

最终返回的集合 是由 若干 R 泛型类型 实例对象组成的 List 集合 ;


2、map 函数设计理念


作用于 Iterable 集合上的 map 变换函数 , 执行后 , 原始的 Iterable 类型的集合没有进行修改 ,

返回的集合是 新的 List 类型的集合 ;


map 函数 返回的 List 类型的集合 的 元素个数 , 与 Iterable 类型的输入集合 的元素个数 是相同的 ;

map 函数 返回的 List 类型的集合 的 元素类型 , 与 Iterable 类型的输入集合 的元素类型 可以是不同的 ;


函数式编程 的 设计理念 就是 原始数据保持不变 , 在函数调用链上传递的是数据副本 及 修改后的信息 ;


3、代码示例


代码示例 : 首先生成了一个 字符串集合 , 然后 调用 map 函数 , 传入一个 匿名函数 , 匿名函数的类型是 (T) -> R , 其接收一个泛型 T , 也就是 遍历的字符串对象 , 然后在匿名函数中 , 进行变换操作 ;

下面调用 map 变换函数时 , 还使用了 链式调用 , 在第一个变换后的集合的基础上 , 又进行了一次变换 ;

fun main() {    val persons = listOf("Tom", "Jerry", "Jack")    println("原集合 persons : $persons")    val student = persons        .map { person -> "$person is a student" }        .map { student -> "$student, go to school"}    println("变换后的 persons 集合 : $persons")    println("变换后的 student 集合 : $student")}

执行结果 : 变换后 persons 集合 , 也就是 原集合没有发生新的变化 , 返回的集合是新创建的集合 ;

原集合 persons : [Tom, Jerry, Jack]变换后的 persons 集合 : [Tom, Jerry, Jack]变换后的 student 集合 : [Tom is a student, go to school, Jerry is a student, go to school, Jack is a student, go to school]

在这里插入图片描述








1、flatMap 函数原型分析


flatMap 函数 接收 (T) -> Iterable 类型的 匿名函数 作为参数 , 返回 List 类型的集合 ;

public inline fun <T, R> Iterable<T>.flatMap(transform: (T) -> Iterable<R>): List<R>

flatMap 函数 常用于 操作 集合 中的 集合 , 外层 集合每个元素 都是一个集合 , 称为 内层集合 , 将所有 内层集合 中的元素 都展开 , 放到一个 新的集合中 , 新的集合包含了 所有 内层集合 的元素 ;

外层集合的类型 Iterable , 其中 T 就是内层集合的类型 , 内层集合的类型是 Iterable 类型 , 内层集合的元素类型是 R 类型 , 最终返回的结果是 List 类型的集合 ;

其本质就是合并集合 ;


2、代码示例


代码示例 : 外层集合中有两个元素 , 分别是 listOf(“Tom”, “Jerry”) 集合 和 listOf(“123”, “456”) 集合 , 对外层集合使用 flatMap 变换函数 , 则可以 将两个内层集合中的元素合并起来放到一个新的集合中 ;

原来的外层集合以及内层集合不变 , 返回的 total 集合是一个新的集合 ;

此外在 flatMap 函数中可以传入 (T) -> Iterable 类型的 匿名函数 作为参数 , 对内层集合进行处理 ;

fun main() {    val total = listOf(        listOf("Tom", "Jerry"),        listOf("123", "456"))        .flatMap { it }    println(total)}

执行结果 :

[Tom, Jerry, 123, 456]

在这里插入图片描述

来源地址:https://blog.csdn.net/shulianghan/article/details/128835718

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【Kotlin】函数式编程 ① ( 函数式编程简介 | 高阶函数 | 函数类别 | Transform 变换函数 | 过滤函数 | 合并函数 | map 变换函数 | flatMap 变换函数 )

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

【Kotlin】函数式编程 ① ( 函数式编程简介 | 高阶函数 | 函数类别 | Transform 变换函数 | 过滤函数 | 合并函数 | map 变换函数 | flatMap 变换函数 )

文章目录 一、函数式编程简介1、编程范式2、高阶函数3、函数式编程4、前端开发技术 二、函数类别三、变换函数四、map 变换函数1、map 函数原型分析2、map 函数设计理念3、代码示例 五、flatMap 变换函数1、f
2023-08-19

【Kotlin】函数式编程 ② ( 过滤函数 | predicate 谓词函数 | filter 过滤函数 | 合并函数 | zip 函数 | folder 函数 | 函数式编程意义 )

文章目录 一、过滤函数二、filter 函数原型三、filter 过滤函数代码示例1、filter 函数简单示例2、filter 过滤函数与 flatMap 变换函数 组合使用示例3、filter 过滤函数与 map 变换函数 组合
2023-08-19

js函数式编程中的高阶函数有哪些

小编给大家分享一下js函数式编程中的高阶函数有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!函数式编程-->高阶函数缺点,不能进行流程控制mapconst a
2023-06-17

Python中级篇—函数式编程的概念和原则(匿名函数和高阶函数)

在Python中,函数是一等公民,可以像变量一样被传递和操作。Python提供了一些内置函数,如map、filter和reduce等,用于支持函数式编程。
Python函数2024-11-30

函数式编程如何与golang并发编程相结合?

函数式编程和并发编程结合的好处:数据不可变性:使用不可变数据避免共享和竞态条件。纯函数性:使用纯函数处理通过管道的消息,避免状态突变和竞态条件。并发的可预测性和正确性:确保并发操作的正确性和可预测性。函数式编程与 Go 并发编程的结合函数
函数式编程如何与golang并发编程相结合?
2024-05-04

如何在函数式编程中处理可变状态和副作用?

函数式编程所强调的的不可变性和无副作用,能够帮助我们编写出更加稳定可靠的代码,构建更加健壮的系统。

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录