Lambda 表达式是 Java 8 引入的一个重要特性,它提供了一种简洁、灵活和更加函数式的编程方式。
Lambda 表达式是一种匿名函数,可以作为参数传递给方法或存储在变量中,而不需要像传统的匿名内部类那样冗长地书写代码。
需要给说明一下的是,在使用Lambda表达式之前,必须先有一个接口,而且接口中只能有一个抽象方法。(注意:不能是抽象类,只能是接口)
像这样的接口,我们称之为函数式接口,只有基于函数式接口的匿名内部类才能被Lambda表达式简化。Lambda 表达式的类型需要与函数式接口的抽象方法的参数和返回类型匹配。
Lambda 表达式的基本语法如下:
(被重写方法的形参列表) -> {
被重写方法的方法体代码;
}
Lambda 表达式的主要构成部分有:
- 参数列表:指定输入参数。可以是零个或多个参数,如果有多个参数,使用逗号进行分隔。
- 箭头操作符(->):用于将参数列表与 Lambda 表达式的主体分隔开。
- 主体:可以是一个表达式或一组语句。
Lambda 表达式还可以简化,具体的简化规则如下:
1.Lambda 表达式的标准格式
(参数类型1 参数名1, 参数类型2 参数名2) -> {
...方法体的代码...
return 返回值;
}
2.在标准格式的基础上()中的参数类型一样,可以直接省略
(参数名1, 参数名2) -> {
...方法体的代码...
return 返回值;
}
3.如果{}中的语句只有一条语句,则{}可以省略、return关键字、以及最后的“;”都可以省略
(参数名1, 参数名2) -> 结果
4.如果()里面只有一个参数,则()可以省略
参数名 -> 结果
以下是一些 Lambda 表达式的示例:
- 不带参数的 Lambda 表达式:
() -> System.out.println("Hello, world!")
这个 Lambda 表达式没有参数,使用箭头操作符将参数列表与主体分隔开,主体部分为输出字符串 “Hello, world!”。
- 带参数的 Lambda 表达式:
(name) -> System.out.println("Hello, " + name)
这个 Lambda 表达式带有一个参数 name,主体部分为将 name 与字符串拼接并输出。
- 带多个参数的 Lambda 表达式:
(a, b) -> {
int sum = a + b;
System.out.println("Sum: " + sum);
}
这个 Lambda 表达式带有两个参数 a 和 b,主体部分为计算两个参数的和并输出结果。
Lambda 表达式可以在函数式接口中使用,函数式接口是只包含一个抽象方法的接口。Lambda 表达式的类型需要与函数式接口的抽象方法的参数和返回类型匹配。
例如,使用 Lambda 表达式实现 Runnable
接口:
Runnable runnable = () -> {
// 执行代码
};
Lambda 表达式的引入使得 Java 以更加函数式的编程方式进行开发,简化了代码的书写,并提高了代码的可读性和可维护性。