JAVA | Lambda表达式快速学习

JAVA | Lambda表达式快速学习
什么是Lambda表达式Lambda 表达式也可称为闭包它是推动 Java 8 发布的最重要新特性。Lambda 是一个匿名函数,可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格使 Java的语言表达能力得到了提升。lambda 表达式的语法格式如下(parameters) - expression 或者 (parameters) -{ statements; } 以下是lambda表达式的重要特征: 可选类型声明不需要声明参数类型编译器可以统一识别参数值。 可选的参数圆括号一个参数无需定义圆括号但多个参数需要定义圆括号。 可选的大括号如果主体包含了一个语句就不需要使用大括号。 可选的返回关键字如果主体只有一个表达式返回值则编译器会自动返回值大括号需要指定明表达式返回了一个数值。Lambda 表达式的简单例子:// 1. 不需要参数,返回值为 5()-5// 2. 接收一个参数(数字类型),返回其2倍的值x-2*x// 3. 接受2个参数(数字),并返回他们的差值(x,y)-x – y// 4. 接收2个int型整数,返回他们的和(intx,inty)-xy// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)(String s)-System.out.print(s)Lambda表达式语法ComparatorIntegercomparator(x,y)-Integer.compare(x,y);Runnable runnable()-System.out.println(Lambda表达式);Lambda 表达式在Java 语言中引入了一个新的语法元 素和操作符。这个操作符为 “-” , 该操作符被称为 Lambda 操作符或剪头操作符。它将 Lambda 分为 两个部分:左侧:指定了 Lambda 表达式需要的所有参数右侧:指定了 Lambda 体,即 Lambda 表达式要执行的功能。lambda表达式语法可抽象表示为(Type1 param1, Type2 param2, ..., TypeN paramN) - { statment1; statment2; ... return statmentN; }以Predicate判断是否为成年人为例PredicatePersonpredicate(Person person)-{Integer ageperson.getAge();returnage18;};上面的lambda表达式语法抽象表示是比较官方的和我们平时所写的lambda表达式比起来要繁琐一些。别着急下面会一点一点地演示lambda表达式的简化过程。参数类型省略绝大多数情况编译器都可以从上下文环境中推断出lambda表达式的参数类型。这样lambda表达式就变成了(param1, param2, ..., paramN) - { statment1; statment2; ... return statmentN; }上面的例子也可简化为PredicatePersonpredicate(person)-{Integer ageperson.getAge();returnage18;};当lambda表达式的参数个数只有一个可以省略小括号。lambda表达式简写为param - { statment1; statment2; ... return statmentN; }对应的例子简化为PredicatePersonpredicateperson-{Integer ageperson.getAge();returnage18;};当lambda表达式只包含一条语句时可以省略大括号、return和语句结尾的分号。其他省就省了为啥return关键字也可以被省略呢原因是编译器会认为既然只有一个语句那么这个语句执行的结果就应该是返回值所以return也就不需要了。因此lambda表达式简化为param - statment;所以例子又可简化成PredicatePersonpredicateperson-person.getAge()18