Java Lambda 表达式

Mar 11, 2021 阅读(155)

标签: Java

简介

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

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

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

 

Lambda 语法格式

(parameters) -> expression 
或 
(parameters) ->{ statements; }


  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。

  • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。

  • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。

  • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

 

Lambda 表达式作为参数示例

public class LambdaAsParamTest {

    public static void main(String... args) {
        LambdaAsParamTest myApp = new LambdaAsParamTest();
        IntegerMath addition = (a, b) -> a + b;
        IntegerMath subtraction = (a, b) -> a - b;
        System.out.println("40 + 2 = " + myApp.operateBinary(40, 2, addition));
        System.out.println("20 - 10 = " + myApp.operateBinary(20, 10, subtraction));
    }

    public int operateBinary(int a, int b, IntegerMath op) {
        return op.operation(a, b);
    }

    interface IntegerMath {
        int operation(int a, int b);
    }
}

 

Lambda 表达式简写 — 双冒号( :: )

双冒号运算操作符是类方法的句柄,lambda表达式的一种简写,这种简写的学名叫eta-conversion或者叫η-conversion。

public class LambdaTest {

    @Test
    public void testForEach() {
        int[] nums = new int[]{1, 3, 6, 7, 9};
        Arrays.stream(nums).forEach(n -> System.out.println(n));

        // n -> System.out.println(n)  Lambda 简写方式 System.out::println
        // 双冒号运算操作符是类方法的句柄,lambda表达式的一种简写,这种简写的学名叫eta-conversion或者叫η-conversion。
        Arrays.stream(nums).forEach(System.out::println);
    }

}


 参考资料:

https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html


 


MongoDB学习园