是什么?
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
Lambda 属于函数式编程思想,允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
怎么使用?
使用前提:
- 必须支持上下文推导,要能够推导出来 Lambda 表达式表示的是哪个接口中的内容。
- 可以使用接口当做参数,然后传递 Lambda 表达式(常用),也可以将 Lambda 表达式赋值给一个接口类型的变量。
Lambda 表达式的省略规则:
- 小括号中的参数类型可以省略。
- 如果小括号中只有一个参数,那么可以省略小括号。
- 如果大括号中只有一条语句,那么可以省略大括号,return,分号
1 /** 2 * lambda表达式 3 */ 4 public class LambdaDemo { 5 6 final static String ST = "Hello!"; 7 String ss = "Hello!"; 8 9 public static void main(String[] args) { 10 int c = 8; 11 int d = 4; 12 // int a = 10; 不允许声明一个与局部变量同名的参数或者局部变量。 13 14 // 使实现方法可自定义 15 AddService add = (a, b) -> a + b; 16 System.out.println(c + " + " + d + " = " + add.operation(c, d)); 17 18 add = (a, b) -> a - b; 19 System.out.println(c + " - " + d + " = " + add.operation(c, d)); 20 21 add = (a, b) -> a * b; 22 System.out.println(c + " * " + d + " = " + add.operation(c, d)); 23 24 add = (a, b) -> a / b; 25 System.out.println(c + " / " + d + " = " + add.operation(c, d)); 26 27 add = (int a, int b) -> { 28 return a + b; 29 }; 30 System.out.println(c + " + " + d + " = " + add.operation(c, d)); 31 32 // 打印方法中可以获取ST,c,d 但是获取不到ss (且c,d不可更改,隐性的具有 final 的语义) 33 GreetingService gs = str -> System.out.println(ST + str); 34 gs.operation(String.valueOf(c)); 35 } 36 37 interface AddService { 38 Integer operation(int a, int b); 39 40 // 此接口要求必须是函数式接口, 但Java8 允许有一个默认实现方法 41 default int addSome(int a, int b) { 42 return a + b; 43 } 44 } 45 46 interface GreetingService { 47 void operation(String str); 48 } 49 }
有什么好处?
使用 Lambda 表达式可以使代码变的更加简洁紧凑。免去了使用匿名方法的麻烦,并且给予Java简单但是强大的函数化的编程能力。