1. Lambda表达式基础概念
Java8引入的lambda表达式是函数式编程的核心特性之一,它本质上是一个匿名函数,可以理解为对接口中单一抽象方法的简洁实现。在Java这种强类型语言中,lambda的出现极大简化了代码书写,特别是在集合操作和事件处理等场景。
传统匿名内部类的写法需要完整的类定义和方法声明,而lambda只需要关注方法参数和实现逻辑。例如线程创建的对比:
java复制// 传统写法
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("传统方式");
}
}).start();
// Lambda写法
new Thread(() -> System.out.println("Lambda方式")).start();
lambda表达式由三部分组成:
- 参数列表:对应接口方法的参数,可省略类型声明
- 箭头符号:
->分隔参数与实现 - 方法体:单行可省略大括号和return,多行需完整书写
注意:lambda只能用于函数式接口(只有一个抽象方法的接口),常见的如Runnable、Comparator、自定义接口等。Java8在java.util.function包中预定义了多种函数式接口。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心语法与类型推断
2.1 基本语法形式
根据参数和方法体的不同,lambda有几种常见写法:
java复制// 无参形式
() -> System.out.println("无参lambda");
// 单参数(可省略括号)
x -> x * x
// 多参数
(x, y) -> x + y
// 多行代码
(name, age) -> {
String info = name + ":" + age;
return info.toUpperCase();
}
类型推断是lambda的重要特性,编译器能根据上下文自动判断参数类型。例如在List的sort方法中:
java复制List<String> names = Arrays.asList("Tom", "Jerry");
names.sort((a, b) -> a.compareToIgnoreCase(b)); // 自动推断a,b为String
2.2 方法引用与构造器引用
对于已有方法可直接引用的场景,Java8提供了更简洁的写法:
java复制// 静态方法引用
Function<String, Integer> parser = Integer::parseInt;
// 实例方法引用
Consumer<String> printer = System.out::println;
// 构造器引用
Supplier<List<String>> listSupplier = ArrayList::new;
方法引用有四种主要形式:
- 类::静态方法
- 对象::实例方法
- 类::实例方法(第一个参数作为方法调用者)
- 类::new(构造器引用)
