Lambda 表达式,也可称为闭包(注意与js中的闭包不是同一个概念),它允许把函数作为一个方法的参数(函数作为参数传递进方法中),使用 Lambda 表达式可以使代码变的更加简洁紧凑。
(parameters) -> {expression; }
或:
(parameters) -> expression
或:
parameters -> {expression; }
或:
parameters -> expression;
public class Java8Test {
interface LambadTest {
int operation(int a, int b);
}
interface LambadTest02 {
void sayMessage(String message);
}
private int operate(int a, int b, LambadTest lambadTest){
return lambadTest.operation(a, b);
}
public static void main(String args[]){
Java8Test tester = new Java8Test();
// 类型声明
// 省略了new接口名,同时实现方法更加简洁,但只能实现接口的一个方法,有多个方法时不可以这么写
LambadTest test01 = (int a, int b) -> a + b;
// 不用类型声明(可省略参数类型)
LambadTest test02 = (a, b) -> a - b;
// 大括号中的返回语句
LambadTest test03 = (int a, int b) -> { return a * b; };
// 没有大括号及返回语句(可省略大括号)
LambadTest test04 = (int a, int b) -> a / b;
// 不用括号(当一个参数时可以省略括号)
LambadTest02 lambadTest02 = message -> System.out.println("Hello " + message);
System.out.println("10 + 5 = " + tester.operate(10, 5, test01));
System.out.println("10 - 5 = " + tester.operate(10, 5, test02));
System.out.println("10 x 5 = " + tester.operate(10, 5, test03));
System.out.println("10 / 5 = " + tester.operate(10, 5, test04));
lambadTest02.sayMessage("W3CSchool");
}
}
执行以上脚本,输出结果为:
$ javac Java8Tester.java
$ java Java8Tester
10 + 5 = 15
10 - 5 = 5
10 x 5 = 50
10 / 5 = 2
Hello W3CSchool
从上面的列子可以看出Lambda 表达式主要用来定义行内执行的方法类型接口,目的是为了简化代码量,Lambda 表达式免去了使用匿名方法的麻烦,并且给予Java简单但是强大的函数化的编程能力。但需要注意的是当接口有多个抽象方法时,不可以使用lambda的方式。