• Java Lambda 表达式


    Java Lambda 表达式

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

    Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

    使用 Lambda 表达式可以使代码变的更加简洁紧凑。

     1 package java8;
     2 
     3 /**
     4  * 使用 Lambda 表达式需要注意以下两点:
     5  * Lambda 表达式主要用来定义行内执行的方法类型接口,例如,一个简单方法接口。在下面例子中,我们使用各种类型的Lambda表达式来定义MathOperation接口的方法。然后我们定义了sayMessage的执行。
     6  * Lambda 表达式免去了使用匿名方法的麻烦,并且给予Java简单但是强大的函数化的编程能力。
     7  *
     8  * // 1. 不需要参数,返回值为 5
     9  * () -> 5
    10  *
    11  * // 2. 接收一个参数(数字类型),返回其2倍的值
    12  * x -> 2 * x
    13  *
    14  * // 3. 接受2个参数(数字),并返回他们的差值
    15  * (x, y) -> x – y
    16  *
    17  * // 4. 接收2个int型整数,返回他们的和
    18  * (int x, int y) -> x + y
    19  *
    20  * // 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
    21  * (String s) -> System.out.print(s)
    22  */
    23 public class Java8Tester {
    24     public static void main(String args[]){
    25         Java8Tester tester = new Java8Tester();
    26 
    27         // 类型声明
    28         MathOperation addition = (int a, int b) -> a + b;
    29 
    30         // 不用类型声明
    31         MathOperation subtraction = (a, b) -> a - b;
    32 
    33         // 大括号中的返回语句
    34         MathOperation multiplication = (int a, int b) -> { return a * b; };
    35 
    36         // 没有大括号及返回语句
    37         MathOperation division = (int a, int b) -> a / b;
    38 
    39         System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
    40         System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));
    41         System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication));
    42         System.out.println("10 / 5 = " + tester.operate(10, 5, division));
    43 
    44         // 不用括号
    45         GreetingService greetService1 = message ->
    46                 System.out.println("Hello1 " + message);
    47 
    48         // 用括号
    49         GreetingService greetService2 = (message) ->
    50                 System.out.println("Hello2 " + message);
    51 
    52         greetService1.sayMessage("Runoob");
    53         greetService2.sayMessage("Google");
    54     }
    55 
    56     interface MathOperation {
    57         int operation(int a, int b);
    58     }
    59 
    60     interface GreetingService {
    61         void sayMessage(String message);
    62     }
    63 
    64     private int operate(int a, int b, MathOperation mathOperation){
    65         return mathOperation.operation(a, b);
    66     }
    67 }

    结果:

    1 10 + 5 = 15
    2 10 - 5 = 5
    3 10 x 5 = 50
    4 10 / 5 = 2
    5 Hello1 Runoob
    6 Hello2 Google

    例2:

     1 package java8;
     2 
     3 
     4 /**
     5  * 1、lambda 表达式的局部变量可以不用声明为 final,但是必须不可被后面的代码修改(即隐性的具有 final 的语义)
     6  *
     7  * 2、在 Lambda 表达式当中不允许声明一个与局部变量同名的参数或者局部变量。
     8  *
     9  * String first = "";
    10  * Comparator<String> comparator = (first, second) -> Integer.compare(first.length(), second.length());  //编译会出错
    11  */
    12 public class Java8Tester1 {
    13 
    14     static int a = 3;
    15 
    16     public static void main(String args[]) {
    17         int num = 1;
    18         Converter<Integer, String> s = (param) -> System.out.println(String.valueOf(param + num));
    19         // num = 4;  上一行 编译报错 Error:(7, 93) java: 从lambda 表达式引用的本地变量必须是最终变量或实际上的最终变量
    20         // lambda 表达式的局部变量可以不用声明为 final,但是必须不可被后面的代码修改(即隐性的具有 final 的语义)
    21         s.convert(2);  // 输出结果为 3
    22 
    23         Converter<Integer, String> s1 = (param) -> System.out.println(String.valueOf(param + a));
    24         a = 5;
    25         s1.convert(2);  // 输出结果为 7
    26 
    27     }
    28 
    29     public interface Converter<T1, T2> {
    30         void convert(int i);
    31     }
    32 }

    结果:

    3
    7

  • 相关阅读:
    上周热点回顾(2.72.13)
    【故障公告】数据库服务器 CPU 100% 引发全站故障
    【故障公告】周五下午的一次突发故障
    上周热点回顾(1.171.23)
    【故障公告】k8s 开船记:增加控制舱(controlplane)造成的翻船
    [转]Flag an issue Atlassian Support / Jira Software / Resources
    [转]Create a Subtask and Link to Parent Issue in Jira
    [书目]Python数据分析实战
    jenkins
    [转]Jira ScriptRunner 插件使用总结
  • 原文地址:https://www.cnblogs.com/wxdlut/p/14149714.html
Copyright © 2020-2023  润新知