Lambda表达式概念
Lambda表达式,从本质来讲,是一个匿名函数。可以使用这个匿名函数,实现接口中的方法。
函数式接口
一个接口中,要求实现类必须实现的抽象方法,有且只有一个。
interface Test() {
void test();
default void test() {} //default方法子类不是必须实现的
String toString(); //toString方法,是Object类中定义的方法。实现类在实现接口时,toString可以不重写。
}
@FunctionalInterface
用在接口之前,判断这个接口是否是一个函数式接口。
Lambda表达式的语法
Lambda表达式,本质上就是一个匿名函数。因此写lambda表达式时,不需要关心方法名是什么。
参数列表 和 方法体
lambda表达式的基础语法:
(参数) -> {
方法体
};
参数部分:方法的参数列表,要求和实现的接口中的方法参数部分一致,包括参数的数量和类型
方法体部分:方法的实现部分,如果接口中定义的方法有返回值,则在实现的时候,注意返回值的返回
->
:分隔参数部分和方法体部分。
Lambda表达式语法精简
参数部分精简
- 参数类型:参数的类型可以省略(要省略,每个参数的类型都必须省略)
- 参数的小括号:只有当参数的数量是一个时;省略掉小括号的同时,必须要省略参数的类型
方法体部分精简
- 方法体大括号:当一个方法体重的逻辑,有且只有一句的情况下,大括号可以省略
- return的精简:如果一个方法中唯一的一条语句是一个返回语句,此时在省略掉大括号的同时,也必须省略掉return
// SingleReturnSigleParameter lambda1 = (a) -> {
// return a*a;
// };
SingleReturnSigleParameter lambda1 = a -> a*a;