本文共 3783 字,大约阅读时间需要 12 分钟。
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。
(parameters) -> expression或(parameters) ->{ statements; }
以下是lambda表达式的重要特征:
定义几个接口:
/* * 无返回值,无参数接口 */@FunctionalInterfacepublic interface LambdaNoneReturnNoneParamter { void test();}/** * * 无返回值,单个参数接口 */@FunctionalInterfacepublic interface LambdaNoneReturnSingleParameter { void test(int n);}/** * * 无返回值,多个参数解扩 */@FunctionalInterfacepublic interface LambdaNoneReturnMutipleParameter { void test(int a, int b);}/** * * 单个返回值,无参数接口 */@FunctionalInterfacepublic interface LambdaSingleReturnNoneParameter { int test();}/** * * 单返回值,单个参数接口 */@FunctionalInterfacepublic interface LambdaSingleReturnSingleParameter { int test(int a);}/** * * 单返回值,多个参数接口 */@FunctionalInterfacepublic interface LambdaSingleReturnMutipleParameter { int test(int a, int b);}
下面使用Lambda表达式对上述接口实现:
package pers.zhang.syntax;import pers.zhang.interfaces.*;/** * @author zhang * @date 2020/1/10 - 20:54 */public class Syntax1 { public static void main(String[] args) { //1. Lambda表达式的语法 //Lambda是一个匿名函数 //(参数类别) -> {方法体} //():用来描述参数列表 //{}:用来描述方法体 // ->:Lambda运算符,读作goes to //无参数无返回 LambdaNoneReturnNoneParamter lambda1 = () -> { System.out.println("hello world"); }; lambda1.test(); //单个参数,无返回值 LambdaNoneReturnSingleParameter lambda2 = (int a) -> { System.out.println(a); }; lambda2.test(10); //多个参数,无返回值 LambdaNoneReturnMutipleParameter lambda3 = (int a, int b) -> { System.out.println(a + b); }; lambda3.test(10, 22); //无参数,有返回值 LambdaSingleReturnNoneParameter lambda4 = () -> { System.out.println("lambda4"); return 100; }; System.out.println(lambda4.test()); //单个参数,有返回值 LambdaSingleReturnSingleParameter lambda5 = (int a) -> { return a * 2; }; System.out.println(lambda5.test(25)); //多个参数,有返回值 LambdaSingleReturnMutipleParameter lambda6 = (int a, int b) -> { return a + b; }; System.out.println(lambda6.test(44,55)); }}
精简写法:
package pers.zhang.syntax;import pers.zhang.interfaces.LambdaNoneReturnMutipleParameter;import pers.zhang.interfaces.LambdaNoneReturnSingleParameter;import pers.zhang.interfaces.LambdaSingleReturnMutipleParameter;import pers.zhang.interfaces.LambdaSingleReturnNoneParameter;/** * @author zhang * @date 2020/1/10 - 21:24 */public class Syntax2 { public static void main(String[] args) { /* 语法精简: 1. 参数: 由于在接口的抽象方法中,已经定义了参数的数量和类型。所以在Lambda表达式中,参数的类型可以省略 注意:如果需要省略类型,则每一个参数的类型都要省略。 */ LambdaNoneReturnMutipleParameter lambda1 = (a, b) -> { System.out.println(a + b); }; /* 2. 参数小括号: 如果参数列表中,参数的数量只有一个。此时小括号可以省略 */ LambdaNoneReturnSingleParameter lambda2 = a -> { System.out.println("hello world"); }; /* 3. 方法大括号 如果方法体中只有一条语句,此时大括号可以省略 */ LambdaNoneReturnSingleParameter lambda3 = a -> System.out.println("a = " + a); /* 4.如果方法体中唯一的一条语句是一个返回语句,则在省略掉大括号的同时,也必须省略掉return. */ LambdaSingleReturnNoneParameter lambda4 = () -> 10; LambdaSingleReturnMutipleParameter lambda5 = (a, b) -> a + b; System.out.println(lambda5.test(10, 20)); }}
转载地址:http://rkpqb.baihongyu.com/