当前位置:网站首页>十二、Kotlin进阶学习:一、Lambda 表达式;二、高阶函数;
十二、Kotlin进阶学习:一、Lambda 表达式;二、高阶函数;
2022-07-30 05:43:00 【¥伊人独醉】
一、Lambda 表达式;
Lambda 表达式是有一种匿名函数
这样做可以将函数作为入参或者返回值对待。
Lambda表达式的特点:
- Lambda表达式总是被大括号括着
- 其参数(如果存在)在 -> 之前声明(参数类型可以省略)
- 函数体(如果存在)在 -> 后面。
lambda表达式的分类:
(1)无参有返回值
(2)有参无返回值
(1)无参数有返回值类型 lambda表达式
语法:
{
函数体(可执行的代码)
}
【案例】


日志:
【案例】如果想多次调用lambda表达式,怎么办?
可以将lambda表达式赋值给一个变量
这个变量类型就是一个lambda表达式

日志:
注意:


【案例】变体写法
日志:
(2)有入参有返回类型的lambda表达式
语法:
{
a:Int -> a
}
【案例】

日志:
![]()
【案例】多行函数体
日志:
二、高阶函数;
将lambda表达式作为入参或者返回值,这种函数在kotlin中称之为高阶函数。
(1)lambda表达式作为入参使用
例如:若干个数:
第一次需求是,找出大于0 的数。
第二次需求是,找出小于50的数。
第三次……
【案例】

日志:
(2)lambda表达式作为返回值使用
例如:根据不同的条件,返回不同的处理方法,这个方法就是一个lambda表达式
【案例】

日志:
1、入参含有lambda表达式的高阶函数
【案例】实现2个数的若干种操作
+ 、 - 、 * 、 /


日志:
2、返回值为lambda表达式的高阶函数
【案例】根据用户选择实现不同的运算
例如:用户选择add标签,就按加法运算;
用户选择sub这个标签,就按减法运算;
用户选择multi这个标签,就按乘法运算
用户选择divide这个标签,就按除法运算

日志:
3、优化带有lambda表达式作为入参的高阶函数
(1)省略小括号
如果入参只有一个参数,且是lambda表达式,那么可以省略小括号
【案例】

日志:
(2)将lambda表达式移至小括号外
如果多个入参,最后一个入参是lambda表达式,则可以将这个lambda表达式移至小括号外。

日志:
(3)使用it关键字
如果入参这个lambda表达式只接收一个入参,这个入参可以使用it代替

日志:
4、Collections提供的有关操作,且是高阶函数的:
api:
Iterable<T>.find(predicate:(T)->Boolean):T? 查出满足条件的第一个元素,没有找到返回Null
Iterable<T>.first(predicate:(T)->Boolean):T 查出满足条件的第一个元素,如果没有就抛出异常
Iterable<T>.last(predicate:(T)->Boolean):T 查出满足条件的最后一个元素,如果没有就抛出异常
Iterable<T>.single(predicate: (T)->Boolean):T 查出满足条件的唯一元素,只能有一个,否则抛出异常
Iterable<T>.takeWhile(predicate: (T)->Boolean):List<T> 查出满足条件的多个元素,是一个集合,如果没有查出返回一个空的集合。且第一个元素必须满足条件,否则不会继续查找。
Iterable<T>.filter(predicate: (T)->Boolean):List<T> 查出满足条件的多个元素,组成一个集合,没有找到就返回一个空的集合。
Iterable<T>.count(predicate: (T)->Boolean):Int 查出满足条件的元素个数
【案例】

日志:
元素比较的api:
iterable<T>.maxBy(selector:(T)->R):T? 找出集合中最大值
iterable<T>.minBy(selector:(T)->R):T? 找出集合中最小值
iterable<T>.distinctBy(selector:(T)->R):T? 去掉集合中重复的元素
【案例】

日志:
边栏推荐
- Arrays工具类的使用
- 线程的5种状态
- MySQL 索引的数据结构及类型
- Solution to TypeError The view function did not return a valid response. The function either returned None
- MySQL special statement and optimizer
- SQL Server安装教程
- Jackson 序列化失败问题-oracle数据返回类型找不到对应的Serializer
- uni-app: The use of uni-icons and how to customize icons
- Detailed explanation of regular expression syntax and practical examples
- 二十二、Kotlin进阶学习:简单学习RecyclerView实现列表展示;
猜你喜欢

MySQL开窗函数

MySQL 数据类型及占用空间

二十一、Kotlin进阶学习:实现简单的网络访问封装

Nodejs PM2 monitoring and alarm email (2)

sqli-labs shooting range SQL injection learning Less-1

Servlet basic principles and application of common API methods
![CTFSHOW command execution [web29-web124] unfinished to be continued](/img/89/786fbe65af4c9f269530bf2d08e1a0.png)
CTFSHOW command execution [web29-web124] unfinished to be continued

SSTI range

FastAPI Quick Start

Jackson 序列化失败问题-oracle数据返回类型找不到对应的Serializer
随机推荐
oracle row to column, column to row summary
Redis 发布/订阅
[Ten years of network security engineers finishing] - 100 penetration testing tools introduction
The most powerful and most commonly used SQL statements in history
FastAPI Quick Start
Detailed explanation of regular expression syntax and practical examples
【MySQL功法】第5话 · SQL单表查询
国内数字藏品交易平台开发市场会开放二级市场吗
MySQL 5.7 安装教程(全步骤、保姆级教程)
C#下大批量一键空投实现
SQL Server Installation Tutorial
ClickHouse查询语句详解
Obtain geographic location and coordinates according to ip address (offline method)
Monstache执行monstache -f config.toml出错No processor type exists with name [attachment] [type=parse_exc
Arthas 命令解析(watch/tt/sc)
mysql is not an internal or external command, nor is it a runnable program or batch file to resolve
Function functional interface and application
oracle行转列、列转行总结
线程的5种状态
使用PyQt5为YoloV5添加界面(一)