加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

lambda表达式推导和使用

发布时间:2020-12-15 01:57:17 所属栏目:Java 来源:网络整理
导读:lambda λ希腊字母表中排序第十一位的字母,英语名称为 Lambda, 避免匿名内部类定义过多 其实质属于函数式编程的概念 (params) - expression (params) - statement (params) - { statements } new Thread(()-System.out.println("多线程学习。。。")).start

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 }

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读