Kotlin的Lambda编程(一)
一,何为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编程(一)