0.预备知识
函数式接口:只包含一个抽象方法的接口。
内部类:静态、成员内部类
局部内部类
匿名内部类
1.代码
1 /**
2 * 函数式编程:
3 * lambda表达式前提:
4 * 必须是函数式接口。
5 */
6 //1.定义一个函数接口
7 interface GetFx{
8 void getFx(int x);
9 }
10 //2.0 外部类实现
11 class Fx1 implements GetFx{
12 @Override
13 public void getFx(int x){
14 System.out.println("f(" + x + ")=" + Math.sin(x));
15 }
16 }
17 public class LambdaDemo {
18 //2.1 静态成员内部类实现
19 static class Fx2 implements GetFx{
20 @Override
21 public void getFx(int x) {
22 System.out.println("f(" + x + ")=" + Math.cos(x));
23 }
24 }
25 public static void main(String[] args) {
26 GetFx fx;
27 fx = new Fx2();
28 fx.getFx(1);
29
30 //2.2 局部内部类实现
31 class Fx3 implements GetFx{
32 @Override
33 public void getFx(int x) {
34 System.out.println("f(" + x + ")=" + Math.abs(x));
35 }
36 }
37 fx = new Fx3();
38 fx.getFx(1);
39
40 //2.3 匿名内部类实现
41 fx = new GetFx() {
42 @Override
43 public void getFx(int x) {
44 System.out.println("f(" + x + ")=" + Math.sqrt(x));
45 }
46 };
47 fx.getFx(1);
48
49 //3.0 lambda简化
50 fx = (int a)->{
51 System.out.println("1:"+a);
52 };
53 fx.getFx(1);
54
55 //3.1 简化参数类型(多参数要简化都简化)
56 fx = (a)->{
57 System.out.println("2:"+a);
58 };
59 fx.getFx(1);
60
61 //3.2 简化括号(单参数,多参数必须加括号)
62 fx = a->{
63 System.out.println("3:"+a);
64 };
65 fx.getFx(1);
66
67 //3.3 简化花括号(只适用单行代码)
68 fx = a->System.out.println("4:"+a);
69 fx.getFx(1);
70 }
71 }
以上从 外部类–>静态内部类–>局部内部类–>匿名内部类–>lambda表达式 展示了lambda表达式的简化过程。