Kotlin中的Lambda表达式

接下来我们看看Lambda表达式的用法。

首先看看规则:

**1. kotlin中lambda表达式定义在{}中

2. 其参数(如果存在)在 -> 之前声明(参数类型可以省略)

3. 函数体(如果存在)在 -> 后面**

//源代码:无参

fun l1() {

println(“无参数”)

}

//lambda表达式: 以值的形式传递

val l1 = { println(“无参数”) }

//调用

l1()

//源代码:有参

fun l2(x: Int, y: String) {

println(y.length + x)

}

//lambda表达式: 以值的形式传递

val l2 = { x: Int, y: String -> println(y.length + x) }

//调用

l2(1, “Mike”)

//lambda表达式也可以直接通过run运行

run { l2(1, “tom”) }

3.Lambda应用: 高阶函数

==========================================================================

kotlin中的高阶函数是可以将函数作为参数传递或者返回值返回的函数。

既然函数能作为参数,那么我们看看函数作为参数传递的规则:

  1. () -> Unit//表示无参数无返回值的Lambda表达式类型

  2. (T) -> Unit//表示接收一个T类型参数,无返回值的Lambda表达式类型

  3. (T) -> R//表示接收一个T类型参数,返回一个R类型值的Lambda表达式类型

//普通函数

fun add(x: Int = 0, y: Int = 0): Int {

return x + y

}

//foo可以理解为这个lambda表达式的别名

fun operate(x: Int = 0 ,y: Int = 0, foo: (Int, Int) -> Int) {

print("this result is " + body(x,y))

}

//可以用::调用函数

fun caculate(){

operate(3,7, ::add2)

}

//也可以直接传入lambda表达式

fun caculate(){

operate(3,7, {x, y -> x + y})

}

4.Lambda应用: 简化

========================================================================

val people = listOf(User(“张三”, 18), User(“李四”, 20))

//1.1 函数只有lambda一个实参

//原始完整代码

println(“年纪最大:” + people.maxBy({ user: User -> user.age }))

//step1:如果lambda表达式是函数调用的最后一个实参,它可以放在括号外面

println(“年纪最大:” + people.maxBy() { user: User -> user.age })

//step2: 当lambda是函数唯一的实参时,可以去掉函数调用的括号

println(“年纪最大:” + people.maxBy { user: User -> user.age })

//step3:如果lambda的参数的类型可以推导,那么可以省略参数的类型

println(“年纪最大:” + people.maxBy { user -> user.age })

//step4:对于lambda中一个参数时,可以使用默认参数名称it来代替命名参数,并且lambda的参数列表可以简化,省略参数列表和->

println(“年纪最大:” + people.maxBy { it.age })

//1.2 函数有除了lambda外多个实参

fun lambdaTest1(a: Int, b: (String) -> String) {

println(“$a + ${b(a.toString())}”)

}

fun lambdaTest2(b: (String) -> String, a: Int) {

println(“$a + ${b(a.toString())}”)

}

//调用

lambdaTest1(11) {

“hello: $it”

}

//调用

lambdaTest2({ “hello: $it” }, 22)

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
d开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值