Lambda 表达式
TIP
Lambda 表达式是 Java 8 引入的函数式编程特性,可以简化匿名内部类的写法,让代码更加简洁。
基本语法
java
// 语法: (参数) -> { 方法体 }
// 无参数
Runnable task = () -> System.out.println("执行任务");
// 单参数
Consumer<String> printer = s -> System.out.println(s);
// 多参数
Comparator<Integer> comp = (a, b) -> a - b;函数式接口
Java 8 提供了几个核心函数式接口:
| 接口 | 参数 | 返回值 | 用途 |
|---|---|---|---|
| Predicate | T | boolean | 条件判断 |
| Consumer | T | void | 消费数据 |
| Function | T | R | 转换数据 |
| Supplier | 无 | T | 生产数据 |
与传统方式的对比
java
// 传统匿名内部类
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("按钮被点击");
}
});
// Lambda 简化
button.addActionListener(e -> System.out.println("按钮被点击"));方法引用
java
List<String> names = Arrays.asList("张三", "李四", "王五");
// Lambda
names.forEach(name -> System.out.println(name));
// 方法引用(更简洁)
names.forEach(System.out::println);
// 静态方法引用
names.sort(String::compareToIgnoreCase);实际应用示例
java
List<Order> orders = getOrders();
// 过滤、排序、提取
List<String> result = orders.stream()
.filter(o -> o.getAmount() > 1000)
.sorted(Comparator.comparing(Order::getAmount).reversed())
.map(Order::getOrderNo)
.collect(Collectors.toList());TIP
Lambda 表达式本质上是函数式接口的匿名实现,编译器通过类型推断确定具体类型。