目录
什么是Lambda表达式
- Lambda表达式是现代编程语言引入的一种新语法,它是一种更加灵活的代码块,在程序中被调用和传递
- Lambda表达式总是出现在大括号中
- Lambda无需指定函数名
- Lambda无法指定返回值类型,此时可以用匿名函数代替
- ->之前是Lambda的参数列表,之后是执行体
- 标准语法
{
形参列表->零到多条可执行语句
}
Lambda表达式的应用
替换局部函数
普通局部函数这样定义
fun method07(type:String,x:Int,y:Int):Int{ fun add(x: Int,y: Int):Int{ return x+y } when(type){ "加"->{ return add(x,y) } else->{ return add(x,y) } } }
用Lambda简化
var n1=method11("减") Log.e("sujd====", n1(10,10).toString()) fun method11(type:String):(Int,Int)->Int{ when(type){ "加"->{ return {x,y:Int->x+y} } else->{ return {x,y:Int->x-y} } } }
Lambda表达式的脱离
Log.e("sujd====", list.size.toString()) var list =ArrayList<(Int)->Int>() fun method12(method: (Int) -> Int){ list.add(method) }
Lambda表达式的调用
- 方式一:把Lambda表达式赋值给method13变量,然后调用该变量
Log.e("sujd====", method13(10,20).toString()) var method13={x:Int,y:Int->x+y}
- 方式二:不进行赋值,直接声明直接赋值,调用
Log.e("sujd====", method14.toString()) var method14={ x:Int,y:Int->x+y }(20,30)
kotlin可以根据Lambda表达式推断数据类型,此时可以省略形参类型进行
var method15:(Int,Int)->Int={x,y->x+y}
如果只有一个形参x,那么面的Lambda表达还可以再次简写,用it代替
var method16:(Int)->Int={it+it}
Lambda特殊情况
如果在函数的最后,接收的lambda表达式,如调用系统的:
var list2= listOf<String>("数据1","数据2") var method17=list2.dropWhile({e->e.length>3}) 也可以把Lambda表达式卸载中括号的外面 var method18=list2.dropWhile(){e->e.length>3}
Lambda表达式和匿名函数
Lambda表达式不能指定返回值类型,可以用匿名函数代替Lambda表达式
Log.e("sujd====", method19(10000).toString()) var method19=fun(x:Int):Int{return x}
匿名函数的return和Lambda的return的区别:
- 匿名函数的return
var testList= listOf<Int>(1,2,3,4,5) testList.forEach(fun(n){ Log.e("sujd====", "${n}") return })
- Lambda的return
var testList= listOf<Int>(1,2,3,4,5) testList.forEach({ n->Log.e("sujd====", "${n}") return })
区别在于,匿名函数的return输出1,2,3,4,5
Lambda的return只能输出1,
因为你们函数的return返回的是函数本身
Lambda的return返回的是它所在的函数