接下来我们看看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”) }
==========================================================================
kotlin中的高阶函数是可以将函数作为参数传递或者返回值返回的函数。
既然函数能作为参数,那么我们看看函数作为参数传递的规则:
-
() -> Unit//表示无参数无返回值的Lambda表达式类型
-
(T) -> Unit//表示接收一个T类型参数,无返回值的Lambda表达式类型
-
(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})
}
========================================================================
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)
![](https://img-blog.csdnimg.cn/img_convert/a5be7b3688998afbde5793b22a648a3f.jpeg)
文末
今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。
最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
【Android核心高级技术PDF文档,BAT大厂面试真题解析】
【算法合集】
【延伸Android必备知识点】
【Android部分高级架构视频学习资源】
**Android精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!