Kotlin Lambda表达式与标准库中的高阶函数

news/2024/7/23 23:22:13 标签: kotlin, 开发语言

在Kotlin中,Lambda表达式和标准库中的高阶函数为我们提供了一种简洁而强大的方式来处理集合和执行各种操作。本篇博客将介绍Lambda表达式的基本概念,并结合标准库中的高阶函数示例,展示它们的用法和功能。

Lambda表达式的基本概念

Lambda表达式是一种匿名函数,它可以作为值传递、存储和执行。它的基本语法如下:

kotlin">val lambdaName = { parameters -> lambdaBody }
  • lambdaName 是一个变量,用于存储Lambda表达式。
  • parameters 是Lambda表达式的参数列表。
  • lambdaBody 是Lambda表达式的函数体,包含了执行的代码逻辑。

Lambda表达式的返回值类型和返回值由函数体中最后一条语句决定。

标准库中的高阶函数

Kotlin标准库提供了许多高阶函数,它们可以直接应用于集合操作和其他常见的功能。以下是一些常用的高阶函数示例:

find

find函数用于在集合中查找满足给定条件的第一个元素。如果找到了符合条件的元素,则返回该元素;否则返回null

kotlin">val list = listOf(-2, -1, 0, 1, 2)
println("找出大于0的元素:${list.find { it > 0 }}") // 找出大于0的元素:1
println("找出大于3的元素:${list.find { it > 3 }}") // 找出大于3的元素:null

first和last

firstlast函数用于在集合中查找满足给定条件的第一个或最后一个元素。如果找到了符合条件的元素,则返回该元素;否则会抛出NoSuchElementException异常。

kotlin">val list = listOf(-2, -1, 0, 1, 2)
println("找出first大于0的元素:${list.first { it > 0 }}") // 找出first大于0的元素:1
println("找出last大于0的元素:${list.last { it > 0 }}") // 找出last大于0的元素:2

single

single函数用于在集合中查找满足给定条件的唯一一个元素。如果找到了符合条件的元素,则返回该元素;如果找到多个符合条件的元素,则会抛出IllegalArgumentException异常;如果没有找到符合条件的元素,则会抛出NoSuchElementException异常。

kotlin">val list = listOf(-2, -1, 0, 1, 2)
println("找出single大于0的元素:${list.single { it > 1 }}") // 找出single大于0的元素:2

takeWhile

takeWhile函数用于从集合中获取满足给定条件的连续元素。当遇到第一个不满足条件的元素时,停止查找并返回结果。

kotlin">val list = listOf(-2, -1, 0, 1, 2)
println("找takeWhile大于-3的元素:${list.takeWhile { it > -3 }}") // 找takeWhile大于0的元素:[-2, -1, 0, 1, 2]

filter

filter函数用于过滤集合中满足给定条件的元素,并返回一个新的集合。

kotlin">val list = listOf(-2, -1, 0, 1, 2)
println("找filter大于0的元素:${list.filter { it > 0 }}") // 找filter大于0的元素:[1, 2]

count

count函数用于计算集合中满足给定条件的元素个数。

kotlin">val list = listOf(-2, -1, 0, 1, 2)
println("找count大于0的元素的个数:${list.count { it > 0 }}") // 找count大于0的元素的个数:2

maxBy和minBy

maxByminBy函数用于找出集合中的最大值和最小值。它们接受一个函数作为参数,用于确定比较的依据。

kotlin">val list = listOf(-2, -1, 0, 1, 2)
println("找集合最大值:${list.maxBy { it }}") // 找集合最大值:2
println("找集合最小值:${list.minBy { it }}") // 找集合最小值:-2

其他常用高阶函数

除了上述示例中介绍的高阶函数外,Kotlin标准库还提供了许多其他常用的高阶函数,例如mapflatMapreducegroupBy等。这些高阶函数可以帮助我们更便捷地处理集合和执行各种操作。

repeat函数

repeat函数用于重复执行某条语句或代码块。它接受一个整数参数和一个Lambda表达式作为参数,指定重复的次数和要执行的代码逻辑。

kotlin">repeat(2) {
    println("repeat*2")
}

上述示例中,代码块println("repeat*2")将被执行两次,结果会打印出两行"repeat*2"。

T.run函数

run函数是一个扩展函数,可用于某个对象(例如集合、类实例等)上执行一系列操作。它可以省略对象名字来调用对象的方法,使代码更加简洁。

kotlin">var list2 = ArrayList<String>()
list2.run {
    add("A")
    add("B")
    add("C")
}
println(list2) // [A, B, C]

上述示例中,我们通过run函数在list2对象上执行了一系列的add操作,而无需重复使用list2来调用方法。

总结:
Lambda表达式和标准库中的高阶函数为Kotlin开发者提供了很好的工具来处理集合和执行各种操作。通过灵活运用Lambda表达式和高阶函数,我们可以编写出简洁、高效的代码,提高开发效率。在实际开发中,可以根据不同的场景选择合适的高阶函数,以便达到更好的代码可读性和维护性。


http://www.niftyadmin.cn/n/5111992.html

相关文章

观察者模式-对象间的联动

有个商城小程序&#xff0c;用户希望当有新品上市的时候能通知他们。这样用户就可以不要时刻盯着小程序了。在这个场景中&#xff0c;用户向小程序订阅了一个服务——发送新品短信。小程序在有新品上线时负责向订阅客户发出这个消息。 这就是发布-订阅模式&#xff0c;也称观察…

JVM第十八讲:调试排错 - Java 问题排查之工具单

调试排错 - Java 问题排查之工具单 程序员想要有更好的发展&#xff0c;排查问题的能力一定得加强。举个例子&#xff1a;cpu100% 怎么排查&#xff0c;线上接口逐渐变慢了该怎么排查&#xff1f;慢查询该如何治理&#xff1f;你的思路是啥&#xff1f;本文是JVM第十八讲&#…

c++23中的新功能之十七显示this的应用

一、显示this 在前面的文章中分析了显示this(Deducing This),具体的内容请移步《c23新功能之二语法中的Deducing This》&#xff0c;本篇对显示this对实际应用中的一些完善和更新形式进行分析说明&#xff0c;抛砖引玉。 二、CRTP的应用 在前面的学习中&#xff0c;学过CRTP…

Elesticsearch使用总结

写在前面 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java开发的&#xff0c;并作为Apache许可条款下的开放源码发布&#xff0c;是当前流行的企业级搜索引擎。设计用于[云计…

第十二届蓝桥杯模拟赛第三期

A填空题 问题描述 请问在 1 到 2020 中&#xff0c;有多少个数与 2020 互质&#xff0c;即有多少个数与 2020 的最大公约数为 1。 参考答案 800 public class Main {public static void main(String[] args) {int ans0;for(int i1;i<2020;i) {if(gcd(2020,i)1) {ans;}}…

【C/C++笔试练习】初始化列表、构造函数、析构函数、两种排序方法、求最小公倍数

文章目录 C/C笔试练习1. 初始化列表&#xff08;1&#xff09;只能在列表初始化的变量 2.构造函数&#xff08;2&#xff09;函数体赋值&#xff08;3&#xff09;构造函数的概念&#xff08;4&#xff09;构造函数调用次数&#xff08;5&#xff09;构造函数调用次数&#xff…

flutter doctor检测过程中出现网络超时的问题

flutter安装过程中遇到的问题时&#xff1a; Network resources X A network error occurred while checking "https://maven.google.com/": An HTTP error occurred while checking "https://github.com/": 网络超时 打开flutter根目录 1. 找到配置…

Kafka学习(最新版3.6.0)

文章目录 一、初识MQ1.1 什么是MQ1.2 同步和异步通讯1.1.1 同步通讯1.1.2 异步通讯 1.3 技术对比1.4 MQ的两种模式 二、初识Kafka2.1 Kafka的使用场景2.2 Kafka基本概念2.3 Topic与Partition 三、Kafka基本使用3.1 部署前的准备3.2 启动kafka服务器3.3 Kafka核心概念之Topic3.4…