Lambda
( java8新特性)
什么是Lambda表达式
lambda表达式是一个匿名函数,使的代码更加简单,简洁
函数式编程思想
面向对象过分强调必须通过对象的形式来做事,而函数式思想则尽量忽略面向
对象的复杂语法--强调做什么,而不是以什么形式做
jdk1.8加入了Lambda表达式的重量级新特性
Lambda表达式的格式
由三部分组成
一些参数
一些箭头
一段代码
格式:
(参数列表) ->{代码}
括号:接口中抽象方法的参数列表,没有就不写,多个参数间逗号隔开
箭头:代表将参数赋给后面的代码
大括号:重写接口的抽象方法的方法体
例如
语法格式一:无参数数无返回值
Runnable r = () -> System.out.println("Runnable!");
语法格式二:有一个参数无返回值(Consumer为JDK的一个接口)
Consumer<String> con = (x) -> System.out.println(x);
con.accept("Hello Lambda!");
语法格式三:只有一个参数时,小括号可以省略(当然不太建议省略)
Consumer<String> consumer = x -> System.out.println(x);
语法格式4:只有一条语句时,不管是否有返回值(都可以省略return,大括号,分号)
且这个要省略的话,要三个一起省略
语法格式5:Lambda表达式的参数列表的参数类型可以省略!是因为JVM编译时可以
通过上下文推断出数据类型:也就是类型推断!
使用Lambda表达式的前提
使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法
不论是jdk自带的,还是自定义的接口,都是这样,有且仅有一个抽象方法的
接口叫做函数式接口
使用Lambda表达式必须具有上下文推断
也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使
用该表达式做为接口的实例