Kotlin Lambda
Kotlin Lambda
在探索Kotlin Lambda之前,我们先回顾下Java中的Lambda表达式,Java 的 Lambda 表达式是 Java 8 引入的一项强大的功能,它使得函数式编程风格的代码更加简洁和易于理解。Lambda 表达式允许你以一种更简洁的方式表示实现接口(尤其是函数式接口)的方法。它的主要作用是简化代码、减少冗长的匿名类实现,并使得代码更加灵活。
先看一段代码:
Runnable runnable = new Runnable() {@Overridepublic void run() {System.out.println("Hello Java");}
};
等效为:
Runnable runnable = () -> System.out.println("Hello Java");
带参数的和带返回值的其实是类似的,只要满足函数式接口都可以使用lambda表达式简化代码,这里就不做过多的介绍了。
Kotlin高阶函数
在了解Kotlin Lambda之前,我们要先了解Kotlin的高阶函数,高阶函数是指满足以下条件之一的函数:
- 将函数作为参数传递。
- 返回一个函数作为结果。
//函数作为参数
fun a(b: () -> Int) {b.invoke()
}
//函数作为返回结果
fun c(x: Int): (Int) -> Int {return { number -> number * x }
}fun main() {val multiplier = c(2)println(multiplier(2))
}
函数引用
在Kotlin中可以使用::对函数进行引用,并且还可以直接引用类似于集合中易经定义的函数,可以简化代码
//函数引用
fun d(b: (Int) -> Int): Int {return b.invoke(1)
}fun e(parma: Int): Int {return parma
}val f = ::e
val h = d(::e)
注意:::对函数进行引用之后,实则是创建了一个对象,并不是函数本身,定义的函数无法调用invoke方法,而函数对象可以:
val m = f(1)// 等同于f.invoke(1)
val l = (::e)(1) //等同于(::e).invoke(1)
匿名函数
匿名函数(也称为lambda 函数)是一种没有名称的函数。它们通常用于作为函数参数传递给其他函数,或者简化某些操作。Kotlin 提供了两种主要的匿名函数写法:Lambda 表达式和匿名函数。
- Lambda表达式是一种简洁的匿名函数写法,常用于高阶函数中。
val lambda = { parma: Int -> { parma * parma } }
- 匿名函数和 Lambda 表达式非常相似,但它们有一些不同的地方,特别是在返回类型和参数类型推断方面。匿名函数可以显式地指定返回类型和参数类型,且它允许在函数体内使用 return 语句来返回结果。
val a = fun(parma: Int): String {return parma.toString()
}
注意:lambda不能使用return进行返回操作,而匿名函数可以

Kotlin Lambda
在Java中,我们设置函数式接口类型的对象通常使用匿名内部类或者lambda表达式:
private OnClickListener mListener;interface OnClickListener {void onClick(int value);
}public void setOnClickListener(OnClickListener listener) {this.mListener = listener;
}//匿名内部类
setOnClickListener(new OnClickListener() {@Overridepublic void onClick(int value) {}
});
//lambda
setOnClickListener(value -> {});
在Kotlin中lambda表达式变得更加简洁和方便
interface Listener {fun onClick(value: Int)
}fun setListener(listener: Listener) {}
//kotlin可以将setListener方法参数传对象改为高阶函数
fun setListener2(onClick: (Int) -> Unit) {}fun test() {//参数接收对象setListener(object : Listener {override fun onClick(value: Int) {println(value)}})//接收一个匿名函数setListener2(fun(value: Int): Unit {println(value)})//匿名函数可以替换为Lambda表达式setListener2({ value -> println(value) })//若接受的函数是参数列表的最后一个参数,可以写在括号外面setListener2(){ value -> println(value) }//若匿名函数只有一个参数可以省略,kotlin会用it代替它setListener2 { println(it) }
}
最终我们看到了Kotlin Lambda表达式较为简洁的写法。kotlin lambda表达式在声明时已经指定参数类型,因此参数类型可以不写,而返回值永远取最后一行代码的执行结果,因此也不需要指定返回值。Kotlin 匿名函数和Lambda的本质是函数类型的对象,和::是同样的效果,而Java 8中的Lambda只是一种简洁的写法。
相关文章:
Kotlin Lambda
Kotlin Lambda 在探索Kotlin Lambda之前,我们先回顾下Java中的Lambda表达式,Java 的 Lambda 表达式是 Java 8 引入的一项强大的功能,它使得函数式编程风格的代码更加简洁和易于理解。Lambda 表达式允许你以一种更简洁的方式表示实现接口&…...
动态库与静态库:深入解析与应用
在软件开发中,库(Library)是预编译的代码集合,用于在多个程序之间共享功能。根据链接方式的不同,库主要分为两种类型:静态库(Static Library) 和 动态库(Dynamic Library…...
List对象进行排序
目录 一、List对象中某个值进行排序 代码示例 注意事项 二、List.sort 和 Collections.sort 异同 1. 方法所属 2. 使用方式 3. 是否修改原列表 4. 泛型支持 5. 性能 6. 适用场景 7. 示例代码对比 使用 testList.sort 使用 Collections.sort 8. 总结 三、为对象多…...
Java 设计模式之备忘录模式
文章目录 Java 设计模式之备忘录模式概述UML代码实现 Java 设计模式之备忘录模式 概述 备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。方便对该对象恢复到原先保存的状态。 UML Originnato…...
vue3搭建实战项目笔记二
vue3搭建实战项目笔记二 2.1.git管理项目2.2.隐藏tabBar栏2.2.1 方案一:在路由元信息中设置一个参数是否显示tabBar2.2.2 方案二:通过全局设置相对定位样式 2.3.项目里封装axios2.3.1 发送网络请求的两种做法2.3.2 封装axios并发送网络请求2.3.2.1 对axi…...
【原创】解决vue-element-plus-admin无法实现下拉框动态控制表单功能,动态显隐输入框
前言 目前使用vue-element-plus-admin想要做一个系统定时任务功能,可以选择不同的定时任务类型,比如使用cron表达式、周期执行、指定时间执行等。每种类型对应不同的输入框,需要动态显隐输入框才行,但是这个vue-element-plus-adm…...
大疆无人机需要的kml文件如何制作kml导出(大疆KML文件)
大疆无人机需要的轨迹kml文件,是一种专门的格式,这个kml里面只有轨迹点,其它的属性信息都不需要。 BigemapPro提供了专门的大疆格式输出, 软件这里下载 www.bigemap.com 安装后,kml导入如下图: 然后选择…...
前端知识速记--css篇:CSS3中的常见动画及实现方式
前端知识速记–css篇:CSS3中的常见动画及实现方式 常见的CSS3动画 1. 过渡 (Transitions) 过渡是一种非常简单的动画效果,允许你在元素的状态变更时平滑过渡到新状态。 语法格式: transition: property duration timing-function delay;…...
YOLOV8的学习记录(二) yolo8的几个内置模型简介
YOLOv8 是一个多功能的计算机视觉框架,支持多种任务,包括分类(Classify)、检测(Detect)、旋转目标检测(OBB)、姿态估计(Pose)、实例分割(Segment&…...
免费deepseek的API获取教程及将API接入word或WPS中
免费deepseek的API获取教程: 1 https://cloud.siliconflow.cn/中注册时填写邀请码:GAejkK6X即可获取2000 万 Tokens; 2 按照图中步骤进行操作 将API接入word或WPS中 1 打开一个word,文件-选项-自定义功能区-勾选开发工具-左侧的信任中心-信任中心设置…...
Windows操作系统部署Tomcat详细讲解
Tomcat是一个开源的Java Servlet容器,用于处理Java Web应用程序的请求和响应。以下是关于Tomcat的用法大全: 一、安装Tomcat 下载 访问Apache Tomcat官方网站(https://tomcat.apache.org/),根据你的操作系统…...
深入解析A2DP v1.4协议:蓝牙高质量音频传输的技术与实现
1. A2DP概述 A2DP(Advanced Audio Distribution Profile)是一种高质量音频流媒体协议,旨在实现高质量音频内容的分发,通常用于通过蓝牙设备传输音频数据,例如将音乐从便携式播放器传输到耳机或扬声器。与传统的蓝牙语…...
(三)Axure制作转动的唱片
效果图 属性: 图标库:iconfont-阿里巴巴矢量图标库 方形图片转为圆角图片,裁剪,然后加圆角, 唱片和底图是两个图片,点击播放,唱片在旋转。 主要是播放按钮和停止按钮,两个动态面板…...
VueRouter 实例
分析下列代码 const router new VueRouter({mode:history,routes }) 1.const router new VueRouter({ ... })用来创建一个 Vue Router 实例,用于管理 Vue.js 应用的路由。2.mode: history: 作用:启用 HTML5 History 模式,去除…...
Docker 镜像标签使用
写在前面 当使用命令 docker pull mysql 拉取镜像时,其实等价于如下命令 docker pull mysql:latest latest 是默认的标签,字面上理解为最新版本的镜像,实质上 latest 只是镜像的标签名称,跟具体某个版本号地位一样,…...
ASP.NET Core SixLabors.ImageSharp 位图图像创建和下载
从 MVC 控制器内部创建位图图像并将其发送到浏览器;用 C# 编写并与 Linux 和 Windows 服务器兼容。 使用从 ASP.NET MVC 中的控制器下载任何文件类型File。 此示例创建一个位图 (jpeg) 并将其发送到浏览器。它需要 NuGet 包SixLabors.ImageSharp v1.0.4。 另请参…...
蓝桥杯篇---超声波距离测量频率测量
文章目录 简介第一部分:超声波的简介工作原理1.发射超声波2.接收反射波3.计算时间差4.计算距离 硬件连接1.Trig2.Echo 示例代码代码说明注意事项1.声速2.延时精度3.硬件连接 第二部分:频率测量简介频率测量原理1.信号输入2.计数3.计算频率 硬件连接示例代…...
机器学习所需要的数学知识【01】
总览 导数 行列式 偏导数 概理论 凸优化-梯度下降 kkt条件...
【D2】神经网络初步学习
总结:学习了 PyTorch 中的基本概念和常用功能,张量(Tensor)的操作、自动微分(Autograd)、正向传播、反向传播。通过了解认识LeNet 模型,定义神经网络类,熟悉卷积神经网络的基本结构和…...
变相提高大模型上下文长度-RAG文档压缩-3.优化map-reduce(reranker过滤+社区聚类)
我遇到的业务问题实际上是RAG需要处理很多同一对象的日常报告,不像常识类问题,它的相关Document更多而且更分散,日常报告代表数据库里有很多它的内容,而且对象可能只在段落中的几句话提及到。top-k数量受限于大模型长度࿰…...
电解电容的参数指标
容量 这个值通常是室温25℃,在一定频率和幅度的交流信号下测得的容量。容量会随着温度、直流电压、交流电压值的变化而改变。 额定电压 施加在电容上的最大直流电压,通常要求降额使用。 例如额定电压是4V,降额到70%使用,最高施…...
计时器任务实现(保存视频和图像)
下面是一个简单的计时器任务实现,可持续地每秒保存一幅图像,也可持续地每60秒保存一个视频,图像和视频均以当前时间命名: TimerTask类的实现如下: class TimerTask { public:TimerTask(const std::string& path):…...
Django 美化使用ModelForm的输入框
在初次使用ModelForm时,我的html文件代码如下,主要内容是显示一个卡片式表单,通过循环遍历 form 对象动态生成表单字段 {% extends layout.html %}{% block content %} <div class"container"><div class"c1"&g…...
应用层优秀的共享民宿物联网框架该怎么选?
有一说一,应用层优秀的物联网框架通常能帮助提升用户体验、提高运营效率、节能减排等等优势,很多老板也很注重这个层面的设计和打磨,那么对于选择应用层优秀的共享民宿物联网框架时,大家可以从哪几个关键因素进行考量呢࿱…...
【kafka系列】生产者
目录 发送流程 1. 流程逻辑分析 阶段一:主线程处理 阶段二:Sender 线程异步发送 核心设计思想 2. 流程 关键点总结 重要参数 一、核心必填参数 二、可靠性相关参数 三、性能优化参数 四、高级配置 五、安全性配置(可选࿰…...
HCIA-路由器相关知识和面试问题
二、 路由器 2.1 关于路由器的知识 2.1.1 什么是路由器 路由器是一种网络层互联设备,主要用于连接多个逻辑上分开的网络,实现不同网络之间的数据路由和通信。它能根据网络层地址(如 IP 地址)来转发数据包,在网络中起…...
Unity 获取独立显卡数量
获取独立显卡数量 导入插件包打开Demo 运行看控制台日志 public class GetGraphicCountDemo : MonoBehaviour{public int count;// Start is called before the first frame updatevoid Start(){count this.GetIndependentGraphicsDeviceCount();}}...
【stm32】定时器输出PWM波形(hal库)
一. PWM基本原理 PWM是一种通过调节信号的占空比(Duty Cycle)来控制输出平均电压的技术。占空比是指高电平时间与整个周期时间的比值。例如: - 占空比为50%时,输出平均电压为电源电压的一半。 - 占空比为100%时,输出始…...
Deepseek R1模型本地化部署+API接口调用详细教程:释放AI生产力
文章目录 前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装ollama2部署DeepSeek R1模型删除已存在模型,以7b模型为例 三、DeepSeek API接口调用Cline配置 前言 随着最近人工智能 DeepSeek 的爆火,越来越多的技术大佬们开始关注如…...
Mac ARM 架构的命令行(终端)中,删除整行的快捷键是:Ctrl + U
在 Mac ARM 架构的命令行(终端)中,删除整行的快捷键是: Ctrl U这个快捷键会删除光标所在位置到行首之间的所有内容。如果你想删除光标后面的所有内容,可以使用: Ctrl K这两个快捷键可以帮助你快速清除当…...
