[Kotlin入门] 函数式编程与lambda表达式

Kotlin函数式编程与Lambda表达式 函数式编程的基本概念和优势高阶函数的使用方法Lambda表达式的语法和简化技巧作用域函数的应用场景实际项目中的最佳实践函数式编程和Lambda表达式是Kotlin的重要特性,掌握好这些特性可以帮助我们写出更简洁、更易维护的代码。在实际开发中,要根据具体场景选择合适的编程方式,既要利用好函数式编程的优势,也要避免过度使用导致代码难以理解。 阅读详情

1. 集合的函数式API

//找出水果集合里长度最长的单词
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val maxLengthFruit = list.maxBy { it.length }
println("max length fruit is " + maxLengthFruit)

maxBy源代码:maxBy就是一个普通的函数而已,只不过它接收的是一个Lambda类型的参数,并且会
在遍历集合时将每次遍历的值作为参数传递给Lambda表达

public inline fun <T, R : Comparable<R>> Iterable<T>.maxBy(selector: (T) -> R): T? {
    return maxByOrNull(selector)
}

lambda完整表达式,但在实际中往往可以进行简化

{参数名1: 参数类型, 参数名2: 参数类型 -> 函数体}
//数列表的结尾使用一个->符号,表示参数列表的结束以及函数体的开始,
//函数体中可以编写任意行代码(虽然不建议编写太长的代码),并且最后一行代码会自动作为Lambda表达式的返回值

接下来将一步步推导上面的代码如何简化而来的:

val lambda = { fruit: String -> fruit.length }
val maxLengthFruit = list.maxBy(lambda)

直接把参数写在里面

val maxLengthFruit = list.maxBy({ fruit: String -> fruit.length })

当Lambda参数是函数的最后一个参数时,可以将Lambda表达式移到函数括号的外面

val maxLengthFruit = list.maxBy() { fruit: String -> fruit.length }

如果Lambda参数是函数的唯一一个参数的话,还可以将函数的括号省略

val maxLengthFruit = list.maxBy { fruit: String -> fruit.length }

由于Kotlin拥有出色的类型推导机制,Lambda表达式中的参数列表其实在大多数情况下不必声明参数类型

val maxLengthFruit = list.maxBy { fruit -> fruit.length }

当Lambda表达式的参数列表中只有一个参数时,也不必声明参数名,而是可以使用it关键字来代替

val maxLengthFruit = list.maxBy { it.length }

2. Java函数式API

注意:Java函数式API的使用都限定于从Kotlin中调用Java方法,并且单抽象方法接口也必须是用Java语言定义的
如果我们在Kotlin代码中调用了一个Java方法,并且该方法接收一个Java单抽象方法接口参数,就可以使用函数式API。Java单抽象方法接口指的是接口中只有一个待实现方法,如果接口中有多个待实现方法,则无法使用函数式API。
下面进行举例子说明:
Thread类的构造方法中接收了一个Runnable参数

public interface Runnable {
 void run();
}

使用java写法:

Thread(object : Runnable {
 override fun run() {
 println("Thread is running")
 }
}).start()

使用kotlin写法:

Thread(object : Runnable {
 override fun run() {
 println("Thread is running")
 }
}).start()
//kotlin使用object创建匿名类

下面进行简化:

  1. 因为Runnable类中只有一个待实现方法,即使这里没有显式地重写run()方法,Kotlin也能自动明白Runnable后面的Lambda表达式就是要在run()方法中实现的内容
Thread(Runnable {
 println("Thread is running")
}).start()
  1. 如果一个Java方法的参数列表中有且仅有一个Java单抽象方法接口参数,我们还可以将接口名进行省略
Thread({
 println("Thread is running")
}).start()
  1. 当Lambda表达式是方法的最后一个参数时,可以将Lambda表达式移到方法括号的外面;如果Lambda表达式还是
    方法的唯一一个参数,还可以将方法的括号省略 (如第一节介绍)
Thread{
 println("Thread is running")
}.start()

3. 常见集合的API

初始化集合

//list不可变集合
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
//可变集合
val list = mutableListOf("Apple", "Banana", "Orange", "Pear", "Grape")
list.add("Watermelon")
//同理有set
val set = setOf("Apple", "Banana", "Orange", "Pear", "Grape")
mutableSetOf()
//map
val map = HashMap<String, Int>()
map["Apple"] = 1 //添加数据 不建议put
val number = map["Apple"] //取数据
//更简便的map写法
val map = mapOf("Apple" to 1, "Banana" to 2, "Orange" to 3, "Pear" to 4, "Grape" to 5)
//to为一个infix函数

常用api

//找最大maxby
val maxLengthFruit = list.maxBy { it.length }
// 映射map
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val newList = list.map { it.toUpperCase() }
//过滤filter
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val newList = list.filter { it.length <= 5 }
 .map { it.toUpperCase() }
 //中any函数用于判断集合中是否至少存在一个元素满足指定条件
// all函数用于判断集合中是否所有元素都满足指定条件
 val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
 val anyResult = list.any { it.length <= 5 }
 val allResult = list.all { it.length <= 5 }

Claude Desktop Cowork国内实操指南:本地文件自动化办公 大语言模型正从‘问答式AI’迈向‘执行型协作者’,其核心能力在于直接操作本地文件、调用系统工具并嵌入真实工作流。Claude Desktop的Cowork模式正是这一范式的代表,它通过轻量沙箱VM实现对Excel、PPT、PDF、音视频等办公资产的读写与处理,无需手动编码即可完成数据清洗、会议纪要生成、自动化报告输出等任务。技术价值体现在权限可控、环境隔离、结果可交付;典型场景覆盖行政文秘的文档流转、销售运营的数据分析、开发者的脚本调试与环境验证。本文聚焦国内用户高频卡点——网络链路、系统权限与工作流断层, 阅读详情

相关推荐

AI市场风起云涌,ai浏览器是最佳的落地项目,现在ai市场的ai浏览器竞争加剧,得ai浏览器者得天下!

从场景覆盖度来看,AI 浏览器已突破 “网页浏览” 的传统边界,成为连接个人生活、工作、消费的 “超级入口”,这是其他 AI 应用难以比拟的落地优势。在个人生活场景,AI 浏览器可基于用户行为数据主动提供服务 —— 当用户浏览马拉松赛事信息时,浏览器能自动生成 “训练计划 + 装备推荐 + 能量补给方案”,并关联预订链接;在工作场景,Opera Neon 浏览器已实现 “网页内容提取 - 代码生成 - 报告撰写” 的全流程辅助,开发者可直接在浏览器内完成网站开发初稿;

zhang9880000的博客 1086

Android第一行代码——快速入门 Kotlin 编程(2.6 Lambda 编程)

函数的功能非常强大,它可以按照我们的需求对集合中的元素进行任意的映射转换,上面只是一个简单的示例而已。这样我们就将 Lambda 表达式的语法结构和几个常用的函数式 API 的用法都学习完了,虽然集合中还有许多其他函数式 API,但是只要掌握了基本的语法规则,其他函数式 API 的用法只要看一 看文档就能掌握了,相信这对你来说并不是难事。函数是最常用的一种函数式 API,它用于将集合中的每个元素都映射成一个另外的值,映射的规则在 Lambda 表达式中指定,最终生成一个新的集合。

fhbxts的博客 1166

Tomcat漏洞——弱口令爆破

靶机:CentOS7 IP:192.168.100.40。攻击机:kali IP:192.168.100.60。版 权 声 明:本博客所有文章除特别声明外,均采用。文章版权归作者所有,未经允许请勿转载!作 者:PeiyuJue。

weixin_57379923的博客 909

Kotlin从小白到大牛第3篇 【Kotlin】函数式编程视频课程-关东升-专题视频课程

本视频是智捷课堂推出的一套“Kotlin语言学习立体教程”的视频第三部分,主要内容包括:高阶函数、Lambda表达式、数组、集合、函数式编程API等

「智捷课堂」关东升的博客 414

【亲测有效】OpenClaw Gateway 出现 “(no output)“ 卡死问题完整解决指南:从手动重启到 systemd Watchdog 自动恢复

最近在使用 OpenClaw(自托管 AI 助手框架,前身 Clawdbot/Moltbot)时,遇到了一个非常常见的顽疾:TUI(终端界面)或 Telegram 等通道经常显示 "(no output)",消息发出去后机器人完全没反应,看起来像是卡死了。

hampeter的博客 8609

强化学习 | Multi Agents | Trust Region | HATRPO | HAPPO

ICLR2022多智能体论文,将trust region推广到MA上,保证单调递增。学习博客,共7k字,纯手敲。含大量手写笔记。

111辄的博客 1万+

Kotlin入门理解- 函数演变、lambada表达式、高级函数

Kotlin入门理解 函数演变 fun methon(a:String,b:String):String{ return a+b } fun methon1(a:String,b:String):String = a+b //编译时推断返回类型 fun methon2(a:String,b: String) = a+b 个人理解:在kotlin中,方法皆是函数,可以当作参数传递。不同的形式只是为了简化代码 lambada表达式 //如果只有一个形参,用it默认表示。 val lamdab

feipengwang的博客 247

树莓派5安装ROS2小白指南避坑攻略

手把手教你如何在树莓派5上顺利安装ROS2,避开常见问题与陷阱,提升配置效率。针对树莓派5安装ros2过程中的依赖冲突、源配置错误等高频难题提供解决方案,适合新手快速上手。

weixin_35754962的博客 1004

【教程】Kotlin语言学习笔记(五)——Lambda表达式与条件控制

Kotlin语言学习第五部分

EliasChang的博客 1003

SAP CKMLCP 月结7大常见报错:从“未找到成本核算运行”到“物料占用”的完整解决方案

本文深入解析SAP CKMLCP月结过程中的7大常见报错,从权限问题到数据一致性错误,提供系统化的解决方案。重点解决'未找到成本核算运行'和'物料占用'等典型问题,帮助财务人员高效完成成本核算月结,确保数据准确性。

weixin_30299709的博客 415

双目摄像头全景解析:从几何光学到深度智能

双目视觉系统基于仿生学原理,通过水平排列的双摄像头模拟人眼视差机制实现三维感知。其核心是通过标定、校正、匹配等算法流程,将视差转换为深度信息,最终生成三维点云。该系统在自动驾驶、机器人导航、工业检测等领域有广泛应用,但面临弱纹理、重复图案等挑战。未来发展趋势包括与事件相机、深度学习等技术的融合,进一步提升精度和动态性能。

reset2021的博客 120

Kotlin中的lambda函数式API编程

函数接收两个参数,第一个参数是任意类型的对象,第二个参数是lambda表达式,在lambda表达式中会提供第一个参数的上下文,并用最后一行作为返回值。当我们用Kotlin调用Java方法时,如果这个方法只接受一个Java单抽象方法接口参数就可以换成函数式API。函数非常常用,可以把集合的每个元素都映射成另一个值,规则则是由接受的lambda表达式决定。这个函数,该函数工作原理是接收一个lambda表达式,根据传入的条件来找到最大值。的优秀推导类型的机制,可以直接省略类型,然后当参数只有一个时,可以直接用。

zzx_0826的博客 1512

wxComboBox类的使用方法及示例代码

其中,parent表示该控件的父窗口,ID_COMBOBOX是该控件的ID,用于在事件处理函数中区分不同的控件,"默认选项"是下拉列表框的默认选项,options是wxArrayString类型的数组,用于存储下拉列表框中的选项,style可以指定wxComboBox的样式。wxComboBox是wxWidgets中的一个常用控件,它可以被用来显示一组在下拉列表框中的选项,并允许用户从中选择一个选项。上述就是wxComboBox类的基本使用方法,使用这个控件可以方便地实现下拉列表框的功能。

学习使你进步。 713

函数式编程和Lambda表达式 | KMP鸿蒙Kotlin指南

本文档介绍了Kotlin Multiplatform(KMP)在鸿蒙跨端开发中的函数式编程应用。主要内容包括Lambda表达式基础、高阶函数、函数类型等核心概念,展示了如何通过函数式编程实现代码简洁、并发安全和跨端兼容。文档提供了丰富的代码示例,如Lambda表达式定义、高阶函数参数传递、函数组合等实用技巧,并强调函数式编程在代码复用和测试方面的优势。特别针对KMP跨平台特性,说明函数式代码如何高效编译到JavaScript并在OpenHarmony运行,为开发者提供了函数式编程在跨端开发中的实践指导。

Rffhu的博客 980

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

用 Kotlin 实现函数式编程:高阶函数与 Lambda 表达式

函数式编程是一种编程范式,它将计算视为数学函数的求值过程,强调不可变数据和纯函数的使用。与命令式编程不同,函数式编程更注重数据的变换,而非对状态的改变。在函数式编程中,函数是一等公民,这意味着函数可以像其他数据类型一样,作为参数传递给其他函数,也可以作为函数的返回值。这种特性为编程带来了更高的抽象层次,让代码更加简洁、可复用,同时也增强了代码的可测试性与可维护性。高阶函数是指接受一个或多个函数作为参数,或者返回值为函数的函数。在 Kotlin 中,实现高阶函数极为便捷。

数字魔方操控师的博客 802

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【深度动画图文详解:函数式编程思想】 Kotlin 函数式编程: 一切皆是映射

一切皆是映射。 陈光剑 Kotlin中函数式一等公民,地位和对象一样高,你可以在方法中输入函数,也可以返回函数。相对于Scala的学院派风格,Kotlin则是纯的的工程派:实用性、简洁性上都要比Scala要好。 01 — Kotlin 简介 Kotlin是一门新兴的JVM 语言,与Scala等充满野心,想要取代Jav...

AI天才研究院 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Kotlin 面向对象与函数式编程

Kotlin 是一门现代化的编程语言,它充分融合了面向对象(OOP)和函数式编程(FP)的理念,提供了简洁且强大的功能。通过理解 Kotlin 的面向对象和函数式编程特性,开发者可以写出更简洁、优雅、易于维护的代码。在本篇文章中,我们将深入探讨 Kotlin 中的面向对象特性和函数式编程特性,并通过一个实战任务管理应用的开发,演示如何将这些特性应用于实际开发中。Kotlin 的类和构造函数非常简洁,支持主构造函数和次构造函数。主构造函数声明在类头部,次构造函数使用关键字定义。nameage。

秋元的博客 1137

Kotlin 中 Lambda的使用 一、入门 集合的函数式API中Lambda表达式的使用

很多高级编程语言很早就支持Lambda编程,java从JDK1.8开始支持Lambda编程语法,而kotlin从第一版开始就支持Lambda编程。本章从集合的函数式API的使用做的Kotlin中Lambda入门。

old_land的博客 1317

kotlin之函数式接口(lambda 表达式)

kotlin之函数式接口(lambda 表达式) 对于新学者来说lambda 表达式一直是一个比较有阅读阻碍的功能,所以新手慎用 首先可以使用函数式接口的要求 只能有一个抽象方法 函数式接口可以有多个非抽象成员,但是只能有一个抽象成员 可以用 fun 修饰符在 Kotlin 中声明一个函数式接口。 fun interface KRunnable { fun invoke() } SAM 转换 对于函数式接口,可以通过 lambda 表达式实现 SAM 转换,从而使代码更简洁、更有可读性。 使用

一清的博客 2273

【Kotlin函数式编程进阶之路】:从Lambda基础到流式操作全解析

掌握Kotlin lambda 表达式,提升函数式编程效率。本文详解其在集合操作、异步处理与流式API中的应用,涵盖高阶函数、闭包与简化语法等核心技巧,助你写出更简洁高效的Kotlin代码,值得收藏。

CodeNexus的博客 957

Kotlin与函数式编程

Kotlin 简介 由俄罗斯圣彼得堡的JetBrains团队开发的新编程语言,其名称来自于圣彼得堡以西约30公里处的科特林岛。 Kotlin是一种运行在Java虚拟机上的静态类型编程语言。它可以被编译成Java字节码、JavaScript代码、本地机器码。支持与Java,Android 100% 完全互操作。 发展历史 2011年7月,JetBrains推出Kotlin项目 2012...

millerkevin 1280

Kotlin中的Lambda表达式

函数式编程是一种如何编写程序的**方法论**,它将电脑运算视为函数的运算,其主要思想是把运算过程尽量写成一系列的函数嵌套调用。

尼古拉斯的AI笔记 799

Kotlin学习6.1:Lambda表达式入门

Kotlin学习6.1:Lambda表达式入门Lambda表达式简介无参数有返回值有参数有返回值Lambda表达式返回值 Lambda表达式简介 Lambda表达式就是一个匿名函数,它是函数式编程的基础,所谓函数式编程实际上就是一种编程范式,即如何编写程序的方法论。 函数式编程的思想是将计算机运算视为函数的计算,并且计算的代码可以接收函数作为输入参数或者当做返回值来使用。 使用函数式编程可以减少代...

qq_43233085的博客 896

【Kotlin学习】Lambda编程——Lambda表达式和成员引用、集合的函数式API

学习于《Kotlin实战》,本文讲解了Lambda编程的基本用法,讲述了Lambda表达式和成员引用和一部分的集合函数式API

PanicLin的博客 1805

《Kotlin从小白到大牛》第14章:函数式编程基石——高阶函数和Lambda表达式

第14章 函数式编程基石——高阶函数和Lambda表达式 函数式编程思想虽然与面向对象一样立即悠久,但是支持函数式编程的计算机语言不过是近几年的事情。这些语言有Swift、Python、Java 8和C++11等,作为新生的语言Kotlin也支持函数式编程。本章将介绍Kotlin语言中函数式编程最重要的基础知识——高阶函数和Lambda表达式。 14.1 函数式编程简介 函数式编程(functional programming)与面向对象编程一样都一种编程范式,函数式编程,也称为面向函数的编程。在函数式编程

weixin_38072116的博客 715

给Agent写测试-工具调用的回归怎么保

本文提出“测行为不测文字”的三层测试防线,解决 Agent 工具调用回归难题:第一层工具单测(纯函数);第二层循环集成测,通过 mock 模型断言工具调用、参数与回填的正确性;第三层评测集,固定问答对对比行为快照。代码演示了最小可运行测试,强调断言行为而非模型输出,确保提示词改动可安全合并。

D_ENG_F的博客 205
上一篇: [Kotlin技巧] 泛型简化回调
下一篇: 【Android生成APK】 APP生成正式签名的APK
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值