zoukankan      html  css  js  c++  java
  • 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 }

  • 相关阅读:
    【BZOJ】1049: [HAOI2006]数字序列(lis+特殊的技巧)
    【BZOJ】1089: [SCOI2003]严格n元树(递推+高精度/fft)
    【BZOJ】1070: [SCOI2007]修车(费用流+特殊的技巧)
    【BZOJ】1014: [JSOI2008]火星人prefix(splay+hash+二分+lcp)
    【BZOJ】1090: [SCOI2003]字符串折叠(dp)
    【BZOJ】1189: [HNOI2007]紧急疏散evacuate(二分+bfs+网络流)
    【BZOJ】3709: [PA2014]Bohater(贪心)
    【BZOJ】2929: [Poi1999]洞穴攀行(最大流)
    【BZOJ】2435: [Noi2011]道路修建(树形dp)
    【BZOJ】1458: 士兵占领(上下界网络流)
  • 原文地址:https://www.cnblogs.com/116970u/p/11235178.html
Copyright © 2011-2022 走看看