Lambda 表达式
Lambda 表达式是 Java 8 引入的一种函数式编程语法,用于简化函数式接口(只有一个抽象方法的接口)的实现代码。它的核心作用是用更简洁的方式传递 “一段可执行的代码块”,避免了传统匿名内部类的冗余模板代码。
一、Lambda 表达式的基本语法
语法格式:
(参数列表) -> { 代码块 }
(参数列表)
:与函数式接口中抽象方法的参数列表一致(参数类型可省略,Java 会自动推断)。->
:箭头符号,用于分隔参数列表和代码块。{ 代码块 }
:要执行的逻辑,即对抽象方法的实现(若代码块只有一行,可省略{}
和;
)。
二、为什么需要 Lambda 表达式?
对比传统匿名内部类和 Lambda 表达式的写法,就能直观感受到它的优势:
场景:用 Runnable
接口创建线程
传统匿名内部类写法(冗余):
new Thread(new Runnable() {@Overridepublic void run() { // 必须显式写出接口、方法名、@OverrideSystem.out.println("线程执行");} }).start();
Lambda 表达式写法(简洁):
new Thread(() -> System.out.println("线程执行")).start();
(
Runnable
是函数式接口,只有一个run()
方法,Lambda 直接省略了所有模板代码)
三、Lambda 表达式的使用条件
必须满足:只针对函数式接口(即接口中只有一个抽象方法)。
常见的函数式接口:
Runnable
(void run()
)Callable<V>
(V call() throws Exception
)Comparator<T>
(int compare(T o1, T o2)
)- Netty 中的
TimerTask
(void run(Timeout timeout)
)
四、Lambda 表达式的简化规则
根据代码复杂度,Lambda 可以进一步简化:
参数类型可省略(Java 会自动推断):
// 原写法(带参数类型) (int a, int b) -> a + b; // 简化后(省略类型) (a, b) -> a + b;
单个参数可省略括号:
// 原写法(带括号) (s) -> System.out.println(s); // 简化后(省略括号) s -> System.out.println(s);
代码块只有一行时,可省略
{}
和;
:// 原写法(带 {} 和 ;) (a, b) -> { return a + b; }; // 简化后(省略) (a, b) -> a + b;
五、Lambda 表达式的核心价值
- 简化代码:去除匿名内部类的冗余模板(如
new 接口() {}
、@Override
、方法名),让代码更简洁。 - 专注逻辑:直接传递 “要执行的逻辑”,而不是 “实现接口的对象”,更符合函数式编程思想。
- 提升可读性:减少样板代码后,核心逻辑更突出,代码更易理解。
总结
Lambda 表达式是 Java 对函数式编程的支持,本质是 “函数式接口的简化实现方式”。它通过简洁的语法传递代码块,让开发者更专注于业务逻辑,尤其在处理回调、事件监听等场景时非常实用。