Java8新特性 - Lambda 表达式

 是什么?

  Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。

  Lambda 属于函数式编程思想,允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

 

怎么使用?

  使用前提:

  1. 必须支持上下文推导,要能够推导出来 Lambda 表达式表示的是哪个接口中的内容。
  2. 可以使用接口当做参数,然后传递 Lambda 表达式(常用),也可以将 Lambda 表达式赋值给一个接口类型的变量。

  Lambda 表达式的省略规则:

  1. 小括号中的参数类型可以省略。
  2. 如果小括号中只有一个参数,那么可以省略小括号。
  3. 如果大括号中只有一条语句,那么可以省略大括号,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简单但是强大的函数化的编程能力。

上一篇:vue npm ERR! Error:EPERM:operation not permitted


下一篇:053试题 96 - shrink space compact