Lambda表达式
Lambda表达式,也可称为闭包,允许把函数作为一个方法的参数(函数作为参数传递进方法中),使代码变得更加简洁紧凑。
语法格式如下:
(parameters)- > expression
或者
(parameters) - > {statements;}
Lambda表达式的重要特征:
- 可选的类型声明:不需要声明参数类型
- 可选的小括号:一个参数不需要小括号,多个参数需要小括号
- 可选的大括号:如果主体包含了一个语句,就不需要大括号
Lambda表达式实例
package new_jdk;
public class Test02 {
public static void main(String[] args) {
Test02 t = new Test02();
//类型声明
MathOperation add = (int a,int b)->a+b;
//不用类型声明
MathOperation noType=(a,b)->a-b;
//大括号中的返回语句
MathOperation multiplication = (int a,int b)->{return a * b;};
//没有大括号及返回语句
MathOperation division =(int a,int b)->a / b;
System.out.println("10+5="+t.operate(10, 5, add));
System.out.println("10-5="+t.operate(10, 5, noType));
System.out.println("10X5="+t.operate(10, 5, multiplication));
System.out.println("10/5="+t.operate(10, 5, division));
//不用括号
GreetingService greetService1 = (message) ->
System.out.println("hello--"+message);
//用括号
GreetingService greetService2 = (info)->
System.out.println("hello--"+info);
//调用方法
greetService1.sayMessage("Taobao");
greetService2.sayMessage("Google");
}
//接口 定义一个方法 返回值int
interface MathOperation{
int operation(int a,int b);
}
//接口 定义一个方法 无返回值
interface GreetingService{
void sayMessage(String message);
}
private int operate(int a,int b,MathOperation mathOperation) {
return mathOperation.operation(a, b);
}
}
执行以上代码,输出结果为:
10+5=15
10-5=5
10X5=50
10/5=2
hello--Taobao
hello--Google
Lambda表达式需要注意:
1.主要用来定义行内执行的方法类型接口,例如,一个简单方法接口。在上面例子中,我们使用各种类型的Lambda表达式来定义MathOperation接口的方法。然后我们定义了sayMessage的执行。
2.Lambda表达式免去了使用匿名方法的麻烦,并且给与Java简单但是强大的函数化的编程能力。
变量作用域
- Lambda表达式只能引用标记了final的外部局部变量,这就是说
- 我们可以直接在Lambda表达式中方法中访问外层的局部变量
- Lambda表达式的局部变量隐形的具有final的语义