lambda表达式推导和使用

lambda

  • λ希腊字母表中排序第十一位的字母,英语名称为 Lambda,
  • 避免匿名内部类定义过多
  • 其实质属于函数式编程的概念
(params) -> expression  
(params) -> statement  
(params) -> { statements }
new Thread(()->System.out.println("多线程学习。。。")).start();

1、lambda表达式逐级推导

 1 package com.sxt.thread;
 2 
 3 /**
 4  * Lambda表达式 简化线程(用一次)的使用
 5  */
 6 public class LambdaThread {
 7 
 8     //静态内部类
 9     static class Test implements Runnable {
10         public void run() {
11             for (int i = 0; i < 20; i++) {
12                 System.out.println("一边听歌");
13             }
14         }
15     }
16 
17     public static void main(String[] args) {
18 
19         //new Thread(new Test()).start();
20 
21         //局部内部类
22         class Test2 implements Runnable {
23             public void run() {
24                 for (int i = 0; i < 20; i++) {
25                     System.out.println("一边听歌");
26                 }
27             }
28         }
29 
30         new Thread(new Test2()).start();
31 
32         //匿名内部类 必须借助接口或是父类
33         new Thread(new Runnable() {
34             @Override
35             public void run() {
36                 for (int i = 0; i < 20; i++) {
37                     System.out.println("一边听歌");
38                 }
39             }
40         }).start();
41 
42         //jdk8简化
43         new Thread(() -> {
44             for (int i = 0; i < 20; i++) {
45                 System.out.println("一边听歌");
46             }
47         }).start();
48     }
49 }

2、再次推导,加深印象

 1 package com.sxt.thread;
 2 
 3 /**
 4  * @ClassName LambdaTest01
 5  * @Description TODO
 6  * @Date 2019/7/23 22:46
 7  * @Version 1.0
 8  */
 9 public class LambdaTest01 {
10 
11     //静态内部类
12     static class Like2 implements ILike{
13 
14         @Override
15         public void lambda() {
16             System.out.println("I Like Lambda2");
17         }
18     }
19 
20     public static void main(String[] args) {
21 
22         ILike like = new Like();
23         like.lambda();
24 
25         like = new Like2();
26         like.lambda();
27 
28         //方法内部类
29         class Like3 implements ILike{
30 
31             @Override
32             public void lambda() {
33                 System.out.println("I Like Lambda3");
34             }
35         }
36         like = new Like3();
37         like.lambda();
38 
39         //匿名内部类
40         like = new ILike() {
41             @Override
42             public void lambda() {
43                 System.out.println("I Like Lambda4");
44             }
45         };
46         like.lambda();
47         //lambda推导必须存在类型
48         like = () -> {
49             System.out.println("I Like Lambda5");
50         };
51         like.lambda();
52     }
53 }
54 
55 interface ILike{
56     void lambda();
57 }
58 
59 //外部类
60 class Like implements ILike{
61 
62     @Override
63     public void lambda() {
64         System.out.println("I Like Lambda");
65     }
66 }

3、lambda参数传递(无返回值)以及简化

 1 package com.sxt.thread;
 2 
 3 /**
 4  * lambda推导+参数
 5  */
 6 public class LambdaTest02 {
 7 
 8 
 9     public static void main(String[] args) {
10         ILove love = (int a) -> {
11             System.out.println("I Like Lambda-->" + a);
12         };
13         love.lambda(100);
14 
15         //简化
16         love = (a) -> {
17             System.out.println("I Like Lambda-->" + a);
18         };
19         love.lambda(60);
20 
21         //只有一个参数,()可以省略
22         love = a -> {
23             System.out.println("I Like Lambda-->" + a);
24         };
25         love.lambda(80);
26 
27         //如果代码只是一行,还可以省略
28         love = a -> System.out.println("I Like Lambda-->" + a);
29         love.lambda(90);
30     }
31 }
32 
33 interface ILove {
34     void lambda(int a);
35 }
36 
37 //外部类
38 class Love implements ILove {
39 
40     @Override
41     public void lambda(int a) {
42         System.out.println("I Like Lambda-->" + a);
43     }
44 }

4、多个参数+返回值

 1 package com.sxt.thread;
 2 
 3 /**
 4  * lambda推导+参数+返回值
 5  */
 6 public class LambdaTest03 {
 7 
 8 
 9     public static void main(String[] args) {
10         IInterest interest = (int a, int c)-> {
11             System.out.println("I Like Lambda-->" + (a + c));
12             return a + c;
13         };
14 
15         interest.lambda(100,200);
16 
17         interest = (a,c)-> {
18             System.out.println("I Like Lambda-->" + (a + c));
19             return a + c;
20         };
21         interest.lambda(200,200);
22 
23         //()不可以省略
24         /*interest = a,c-> {
25             System.out.println("I Like Lambda-->" + (a + c));
26             return a + c;
27         };*/
28 
29         interest = (a,c)-> {
30             return a + c;
31         };
32 
33         interest = (a,c)->a+c;
34 
35         interest = (a,c)->100;
36 
37 
38         System.out.println(interest.lambda(10,20));
39 
40 
41     }
42 
43 }
44 
45 interface IInterest {
46     int lambda(int a, int b);
47 }
48 
49 //外部类
50 class Interest implements IInterest {
51 
52     @Override
53     public int lambda(int a, int c) {
54         System.out.println("I Like Lambda-->" + (a + c));
55         return a + c;
56     }
57 }

5、多线程示例

 1 package com.sxt.thread;
 2 
 3 /**
 4  * lambda推导+参数+返回值
 5  */
 6 public class LambdaTest04 {
 7 
 8     public static void main(String[] args) {
 9 
10         new Thread(()->{
11             for (int i = 0; i <100 ; i++) {
12                 System.out.println("123");
13             }
14         }).start();
15 
16         new Thread(()->System.out.println("456")).start();
17     }
18 
19 }

 

posted @ 2019-07-23 23:24  清晨的第一抹阳光  阅读(292)  评论(0编辑  收藏  举报