本文demo
GitHub:https://github.com/Shiorys/java8.git
码云:https://gitee.com/Shiory-zzb/java8
1、使用前提
JDK版本:1.8
Lambda表达式需要“函数式接口”的支持
函数式接口:接口中只有一个抽象方法的接口,称为函数式接口。可以使用注解@FunctionalInterface 修饰,可以检查是不是函数式接口。
2、语法
Lambda的语法包括三个部分
- 参数列表:(参数列表)---在左侧,Lambda表达式的参数列表
- 箭头符号:"->"---也称Lambda操作符
- 代码块:{语句体}---在右侧,Lambda 体,要执行的功能
2.1、完整语法格式
(参数列表)->{语句体}
2.2、衍生语法格式
语法格式1:无参数,无返回值,代码块只有一条语句
() -> 语句;
语法格式2:有一个参数,无返回值,代码块只有一条语句
(x) -> 语句; //语句中如果需要使用参数x,直接使用x即可
语法格式3:语法格式2中,如果只有一个参数,小括号可以省略不写
x -> 语句;
语法格式4:有两个以上的参数,有返回值,并且代码块有多条语句
(x,y,...) -> {语句体;return 返回值};
语法格式5:有两个以上的参数,有返回值,并且代码块只有一条语句,return和{}都可以省略不写
(x,y,...) -> 语句;
语法格式6:参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出数据类型,即"类型推断"
(数据类型1 x, 数据类型2 y,...) -> {语句体};
可以写成
(x,y,...) -> {语句体};
扩展:类型推断,如
List<String> list = new ArrayList<>(); //尖括号中就不用再写String
简单记:左右遇一括号省、左侧推断类型省、能省则省