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

这篇具有很好参考价值的文章主要介绍了【Kotlin】函数式编程 ① ( 函数式编程简介 | 高阶函数 | 函数类别 | Transform 变换函数 | 过滤函数 | 合并函数 | map 变换函数 | flatMap 变换函数 )。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。





一、函数式编程简介



1、编程范式


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

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

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


2、高阶函数


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

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


3、函数式编程


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

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


4、前端开发技术


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





二、函数类别



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

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

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


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





三、变换函数



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

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

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

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

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


常见的 变换函数 :

  • map 函数 , 函数原型如下 , 该函数定义在 _Collections.kt 脚本中 ;
/**
 * Returns a list containing the results of applying the given [transform] function
 * to each element in the original collection.
 * 返回一个列表,其中包含将给定的[transform]函数应用于原始集合中的每个元素的结果。
 *
 * @sample samples.collections.Collections.Transformations.map
 */
public inline fun <T, R> Iterable<T>.map(transform: (T) -> R): List<R> {
    return mapTo(ArrayList<R>(collectionSizeOrDefault(10)), transform)
}
  • flatMap 函数 ; , 函数原型如下 , 该函数定义在 _Collections.kt 脚本中 ;
/**
 * Returns a single list of all elements yielded from results of [transform] function
 * being invoked on each element of original collection.
 * 返回在原始集合的每个元素上调用[transform]函数的结果所产生的所有元素的单一列表。
 */
public inline fun <T, R> Iterable<T>.flatMap(transform: (T) -> Iterable<R>): List<R> {
    return flatMapTo(ArrayList<R>(), transform)
}




四、map 变换函数




1、map 函数原型分析


分析 map 函数的原型 :

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

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

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

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


2、map 函数设计理念


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

返回的集合是 新的 List<R> 类型的集合 ;


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

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


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


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]

kotlin transform,Kotlin,kotlin,函数式编程,变换函数,map,flatMap





五、flatMap 变换函数




1、flatMap 函数原型分析


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

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

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

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

其本质就是合并集合 ;


2、代码示例


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

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

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

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

    println(total)
}

执行结果 :

[Tom, Jerry, 123, 456]

kotlin transform,Kotlin,kotlin,函数式编程,变换函数,map,flatMap文章来源地址https://www.toymoban.com/news/detail-800271.html

到了这里,关于【Kotlin】函数式编程 ① ( 函数式编程简介 | 高阶函数 | 函数类别 | Transform 变换函数 | 过滤函数 | 合并函数 | map 变换函数 | flatMap 变换函数 )的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • kotlin高阶函数

    kotlin高阶函数

    函数式API:一个函数的入参数为Lambda表达式的函数就是函数式api 例子: 上面这段函数: 首先这个函数是一个泛型函数 泛型函数的定义:就是我们在写完一个函数后,只知道一个总的类型,而这个总的类型下有很多继承了这个总类型的类,在返回时我们不知道这个函数具体返回哪个子

    2024年02月15日
    浏览(12)
  • Kotlin 操作集合的高阶函数

    Kotlin 提供了很多高阶函数用于对集合进行操作和转换。以下是一些常用的高阶函数: forEach{} :对集合中的每个元素执行指定的操作, 无返回 值。 map{} :对集合中的每个元素执行指定的操作, 返回 操作后的 集合 filter{} :对每一个元素进行筛选, 返回 满足条件的元素 集合

    2024年02月06日
    浏览(11)
  • Kotlin Lambda和高阶函数

    本文链接: 1、lambda的由来 单词\\\"lambda\\\"源于希腊字母λ(小写lambda) \\\"Lambda\\\"一词最早起源于数学中的λ演算(lambda calculus),它是一种函数定义和函数应用的形式系统,由逻辑学家阿隆佐·邱奇(Alonzo Church)在20世纪30年代发明。 邱奇使用λ作为演算中的一个操作符,用于表示匿

    2024年02月12日
    浏览(10)
  • 【C++】STL 算法 - transform 变换算法 ② ( 变换规则为 普通函数 | 变换规则为 Lambda 表达式 | 变换规则为 函数对象 | 变换规则为 函数适配器转换的函数对象 )

    【C++】STL 算法 - transform 变换算法 ② ( 变换规则为 普通函数 | 变换规则为 Lambda 表达式 | 变换规则为 函数对象 | 变换规则为 函数适配器转换的函数对象 )

    transform 算法函数原型 : 下面的函数原型作用是 将 一个输入容器 中的元素 变换后 存储到 输出容器 中 ; 参数解析 : InputIt first1 参数 : 输入容器 的 起始迭代器 ( 包含 ) ; InputIt last1 参数 : 输入容器 的 终止迭代器 ( 不包含 ) ; OutputIt d_first 参数 : 输出容器 的 开始迭代器 , 输出元

    2024年01月21日
    浏览(13)
  • Kotlin(十六) 高阶函数的简单应用

    高阶函数非常适用于简化各种API的调用,一些API的原有用法在使用高阶函数简化之后,不管是在易用性还是可读性方面,都可能会有很大的提升。 所以我们可以通过高阶函数来使一些API变得更简单更易读。在我们APP存储数据时,通常会用到SharedPreferences 这个API,那么我们现在

    2024年02月04日
    浏览(9)
  • 【Kotlin】探索回调机制:函数类型、高阶函数和接口

    当在 Kotlin 中开发应用程序时,经常会遇到需要使用回调机制的情况。回调是一种常见的编程模式,用于在异步操作完成后通知调用方,并处理相应的结果或事件。在 Kotlin 中,有几种不同的方法可以实现回调,包括使用函数类型、高阶函数和接口。每种方法都有其优点和适用

    2024年02月02日
    浏览(13)
  • 【C++】STL 算法 ⑤ ( 二元函数对象 | std::transform 算法简介 | 为 std::transform 算法传入一元函数对象进行转换操作 )

    【C++】STL 算法 ⑤ ( 二元函数对象 | std::transform 算法简介 | 为 std::transform 算法传入一元函数对象进行转换操作 )

    \\\" 二元函数对象 \\\" 指的是 一个实例类 中 , 重载了 \\\" 函数调用操作符 () \\\" 函数 operator() , 并且该函数 接受 2 个参数 ; 如果 \\\" 重载 函数调用操作符 () 函数 \\\" 只接收一个参数 , 那么这个函数对象就是 一元函数对象 ; 下面的结构体类 函数对象 , 就是一个二元函数对象 , 其作用是将

    2024年01月18日
    浏览(16)
  • Android kotlin高阶函数与Java lambda表达式介绍与实战

            目前在Java JDK版本的不断升高,新的表达式已开始出现,但是在Android混淆开发中,kotlin的语言与Java的语言是紧密贴合的。所以Java lambda表达式在kotlin中以新的身份出现:高阶函数与lambda表达式特别类似。接下来我讲会先讲Java的lambda,再介绍kotlin的高阶函数。 2.1

    2024年02月15日
    浏览(39)
  • 【人工智能】LLM 大模型的本质:一个超高阶函数(函数式编程思想,高阶函数),大模型的本质是有巨大数量的函数复合组成的超高阶函数

    LLM 大模型的本质:一个超高阶函数(函数式编程思想,高阶函数),大模型的本质是有巨大数量的函数复合组成的超高阶函数。 —— 禅与计算机程序设计艺术

    2024年02月09日
    浏览(14)
  • Scala的函数式编程与高阶函数,匿名函数,偏函数,函数的闭包、柯里化,抽象控制,懒加载等

    Scala的函数式编程与高阶函数,匿名函数,偏函数,函数的闭包、柯里化,抽象控制,懒加载等

    函数式编程 解决问题时,将问题分解成一个一个的步骤,将每个步骤进行封装(函数),通过调用这些封装好的步骤,解决问题。 例如:请求-用户名、密码-连接 JDBC-读取数据库 Scala 语言是一个完全函数式编程语言。万物皆函数。 函数的本质:函数可以当做一个值进行传递

    2024年02月09日
    浏览(6)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包