什么是Lambda表达式?
Lambda 表达式是 Java 中的一种简洁语法,用于表示匿名函数。
它是 Java 8 中引入的功能,旨在提高代码的简洁性和可读性。
尤其是在处理函数式编程或需要传递行为的场景下,例如集合操作、并行流处理等。
我们为什么要学习或使用Lambda表达式?
代码更简洁:减少了匿名类的样板代码。
更具可读性:将行为直接传递给函数。
结合 Stream API 提高数据处理的效率和易读性。
什么时候可以用Lambda表达式?
如果一个接口中有且只有一个待实现的抽象方法,那么我们可以将匿名内部类简写为Lambda表达式
public static void main(String[] args) {
Study study = () -> System.out.println("我是逆蝶!");
study.study();
}
注意事项
Lambda 表达式只能用于函数式接口(接口中有且只有一个抽象方法)。
如果需要使用外部变量,它必须是隐式 final(不能在 Lambda 表达式内外修改其值)。
Lambda 表达式的语法
基本语法结构为:
(参数列表) -> {方法体}
构成部分
参数列表:可以有零个、一个或多个参数,参数类型可以省略(由编译器推断)。
箭头符号 (
->
):分隔参数列表和方法体。方法体:包含 Lambda 表达式的逻辑,可用一条或多条语句。
或者可以这么表示:
([参数类型 参数名称,]...) ‐> { 代码语句,包括返回值 }
和匿名内部类不同,Lambda仅支持接口,不支持抽象类
接口内部必须有且仅有一个抽象方法(可以有多个方法,但是必须保证其他方法有默认实现,必须留一个抽象方法出来)
示例
1. 无参数的 Lambda 表达式
() -> System.out.println("Hello Lambda!");
2. 有一个参数的 Lambda 表达式
x -> System.out.println(x);
3. 有多个参数的 Lambda 表达式
(a, b) -> a + b
4. 有多条语句的方法体
(x, y) -> { int sum = x + y; return sum; }
没看懂?那让我们举一个不那么抽象的例子:
@FunctionalInterface //添加了此注解的接口,都支持lambda表达式,符合函数式接口定义
public interface Runnable {
public abstract void run(); //有且仅有一个抽象方法,此方法返回值为void,且没有参数
}
因此,Runable的的匿名内部类实现,就可以简写为:
Runnable runnable = () -> { };
我们也可以写一个玩玩:
@FunctionalInterface
public interface Test { //接口类型
String test(Integer i); //只有这一个抽象方法,且接受一个int类型参数,返回一个String类型结果
}
它的Lambda表达式的实现就可以写为:
Test test = (Integer i) -> { return i+""; }; //这里我们就简单将i转换为字符串形式