企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
转载自:https://www.runoob.com/java/java8-lambda-expressions.html **** **1. 什么是Lambda表达式** Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。 Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。 使用 Lambda 表达式可以使代码变的更加简洁紧凑。 <br/> **2. Lambda表达式语法** ``` (parameters) -> expression 或 (parameters) ->{ statements; } ``` <br/> **3. lambda表达式的重要特征** * 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。 * 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。 * 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。 * 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。 **4. lambda表达式例子** ```java public class Java8Tester1 { public static void main(String[] args) { Java8Tester1 tester1 = new Java8Tester1(); //类型声明 MathOperation add = (int a, int b) -> a + b; //不用类型声明 MathOperation sub = (a, b) -> a - b; //大括号中的返回语句 MathOperation multi = (a, b) -> { return a * b; }; //不使用大括号和返回语句 MathOperation division = (a, b) -> a / b; //10 + 5 = 15 System.out.println("10 + 5 = " + tester1.operate(10, 5, add)); //10 - 5 = 5 System.out.println("10 - 5 = " + tester1.operate(10, 5, sub)); //10 x 5 = 50 System.out.println("10 x 5 = " + tester1.operate(10, 5, multi)); //10 / 5 = 2 System.out.println("10 / 5 = " + tester1.operate(10, 5, division)); //不用括号 GreetingService greetingService1 = message -> System.out.println(message); //用括号 GreetingService greetingService2 = (message) -> System.out.println(message); //Runoob greetingService1.sayMessage("Runoob"); //Google greetingService2.sayMessage("Google"); } interface MathOperation { int operation(int a, int b); } interface GreetingService { void sayMessage(String message); } private int operate(int a, int b, MathOperation mathOperation) { return mathOperation.operation(a, b); } } ``` <br/> **5. 变量作用域** ```java public class Java8Tester2 { //1. 对于全局变量在lambda表达式中使用没有限制 final static String salutation1 = "Hello!"; private String salutation2 = "Hello!"; @Test public void test01() { //2. 如果局部变量被lambda表达式引用了,则相当于 // final String salutation3 = "Hello!"; 被 final 修改的变量是不能修改的 String salutation3 = "Hello!"; //3. 不能声明与lambda参数中同名的局部变量,否则编译报错 //String message = "messsage"; GreetingService greetingService = message -> { //4. lambda表达式中只能引用局部变量,不能修改,否则编译报错 //salutation3 = "Hello"; String newMessage3 = salutation3 + message; System.out.println(newMessage3); }; //Hello! Tom. greetingService.sayMessage(" Tom."); //5. salutation3被lambda表达式引用了,这里修改编译报错,不允许修改,因为它是 final 了 //salutation3 = "Hello"; } interface GreetingService { void sayMessage(String message); } } ```