一、前言
lambda运算时java后面版本引进的,所以实现的仅仅是从形式上简化代码,内部的优化并不是非常出色,而Kotlin一开始就支持函数式编程,使得其lambda表达式具有性能上的优势,同时Kotlin简洁的风格也给lambda表达式进一步简化提供了一个良好的实现方式,下面带大家具体看看他们之间的区别以及如何更好的使用Kotlin的极简化lambda表达式
二、Kotlin lambda表达式
java的一般lambda表达式
由单抽象接口实现的,并不是所有的函数都能使用lambda表达式,需要有这个接口的支持
(参数列表) -> {函数体}
//例子
//打印一个加法的运算结果,这里是Runnable()接口实现的
new Thread (()->System.out.println("hello")).start();
Kotlin的lambda表达式
最标准的lambda表达式
{
参数列表 -> 函数体
}
当lambda表达式里面没有参数时,可省略 ->
{
函数体
}
如果函数类型时最后一个类型,则可以将括号移动到括号外面
fun1({v -> println("hello wresource")})
//可以简化成下面的表达式
fun1(){
v -> println("hello wresource")
}
如果参数只有一个lambda表达式,则可以将小括号去掉
fun1(){
v -> println("hello wresource")
}
//可以简化成
fun1{
v -> println("hello wresource")
}
补充
- 若lambda表达式仅有一个参数,则可以使用默认参数it进行替代
- 若具有多个参数,则未使用的参数可以使用下划线_替代
- 方法引用,java里面时类名::方法名实现的,kotlin亦如此
- Kotlin对于单抽象接口的转换,即将kotlin的lambda函数体转换成单个方法的java接口实现,只要类型匹配上就可以转换
加入我的技术社区,每天一起学习Kotlin
点击下方的logo即可加入kotlin开发者社区: