Lambda表达式
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。
Lambda表达式省去面向对象的条条框框,格式有3个部分组成:参数、箭头、代码
(参数类型 参数名称)->{ 代码语句 }
小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。
`->`是新引入的语法格式,代表指向动作。
大括号内的语法与传统方法体要求基本一致
使用Lambda表达式(无参无返回)
// demo01 接口 ,内含唯一抽象方法aa(),无参,无返回值
interface Demo01{
abstract void aa();
}
public class Test_01 {
public static void main(String[] args) {
// 使用Lambda表达式调用demo01test方法
demo01test( ()->{ System.out.println("aa"); } );
}
public static void demo01test(Demo01 demo01){
demo01.aa();
}
}
使用Lambda表达式(有参有返回)
// Demo02接口,内涵唯一的抽象方法demo02() ,有两个int参数,返回值为int
interface Demo02{
int demo02(int a , int b);
}
public class Test_03 {
public static void main(String[] args) {
// 使用Lambda表达式调用aa()方法,返回a,b的值的和
System.out.println(aa(12, 13, (a, b) -> {
return a + b;
}));
}
public static int aa(int a, int b, Demo02 demo02){
return demo02.demo02(a,b);
}
}
// 输出:25
Lambda表达式省略格式
Lambda表达式强调的是“做什么”而不是“怎么做,所以凡是可以根据上下文推导得知的信息,都可以省略。例如上例中还可以使用Lambda的省略写法:
aa(132, 13, (a, b) -> a+b);
省略规则
aa(12, 13, (int a,int b) -> { return a + b; });
aa(132, 13, (a, b) -> a+b);
- 小括号内参数的参数类型可以省略;
- 如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字及语句分号
- 如果小括号内有且仅有一个参数,则小括号可以省略
aa(12,(a) -> {return a;});
aa(12,a->{ return a; });
interface Demo02{
int demo02(int a );
}
使用Lambda表达式的前提
-
使用Lambda表达式必须具有接口,且要求接口中有且仅有一个抽象方法(也就是函数式接口)
-
使用Lambda表达式必须具有上下文推断
也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例