Kotlin的Lambda编程(一)

作者 : 开心源码 本文共1380个字,预计阅读时间需要4分钟 发布时间: 2022-05-12 共180人阅读

一,何为Lambda?

本质上就是可以传递给其余函数的一小段代码

二,Lambda的作用

可以轻松的把通用的代码结构去程库函数,常见就是和集合一起工作,能够有效的缩短代码,使得代码更加简洁,在Kotlin中就使用了大量的Lambda表达,并且Kotlin的和java的能够无缝连接。

三,Lambda表达式和成员引用

java的点击事件会以内部类的形式进行操作,如下

button.setOnClickListener(new OnClickListener(){
@override
public void onClick(View view){
}
});

然而kotlin可以这样

button.setOnClickListener{
//操作
}
也可以这样
button.setOnClickListener{ view->
//操作
}
比照一下我们看起来是不是简单多了,是不是看起简单多了,代码看起来既美观也简洁,这还不算什么,好戏还在后面。

Lamdba与集合

继续我们的操作
一个集合 val list = listOf(Person(“张三”,22),Person(“李四”,33))
找出里面最大的年龄,当然你可以写一个方法进行再循环中判断查找,假如这样做你就是太Low了,现在告诉你们最简单的方法
list.maxBy{it.age} 这样就OK了,一句话搞定。是不是很神奇,其实这就会Kotlin内置的库函数 我们直接调用就完事,其中的 it.age就是实现这个逻辑的Lamdba,里面进行年龄的判断工作。

Lambda表达式的语法

{x:Int,y:Int -> x+y} 始终在大括号里面,在符号->前面的是参数,后面的函数体。例如:
val sum = {x:Int,y:Int -> x+y}
println(sum(1,2))

Kotlin有这样的一种语法束缚,假如Lambda表达式是函数调用的最后一个实参,它可以放到括号的外边。

people.maxBy(){p:Person ->p.age}

当是唯一实参的时候,还可以去掉代码中的空括号对。Lambda还对类型可以进行类型的推导,上面的Person类型可以省略。使用默认参数也可以 it代替

使用默认参数名称

people.maxBy { it.age }  //其中it是自动生成的参数名称

在作用域中访问变量

Lambda中使用函数参数

fun test(message:Collection<String>,msg:String){    messages.forEach{        Log.d("tag","$msg $it")    }}

Kotlin中不会仅限于访问final变量,在Lambda内部可以修改这些变量

注意:
Java只允许你捕捉final变量,Kotlin可以访问非final,并可以修改它们。

成员引用

val getAge = Person::age//这个地方后面可以用泛型方式代替Person。Person::age  //类和成员,前面是类,后面是成员。//引用顶层函数 可以省略类直接写冒号。fun salute() = println("sssss")run(::salute)

这种省略了类名称,直接以冒号开头,成员引用::name被当做实参进行传递给run,它会掉相应的函数。
这部分到此结束!!
后面还有 集合的函数式API等用法,下期详解…..

作者写作不易,希望小小鼓励 ,将会是我前进的动力。欢迎指正。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Kotlin的Lambda编程(一)

发表回复