Lambda 表达式是 Java 8 引入的一个重要特性,它提供了一种更简洁的方式来表示匿名函数。基本语法如下:
(parameters) -> { statements }
1.1 基本示例
// 1. 无参数的 Lambda 表达式
Runnable runnable = () -> System.out.println("Hello Lambda!");
// 2. 单个参数的 Lambda 表达式(可以省略参数括号)
Consumer<String> consumer = name -> System.out.println("Hello, " + name);
// 3. 多个参数的 Lambda 表达式
BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;
2. 函数式接口
Lambda 表达式需要与函数式接口配合使用。函数式接口是只包含一个抽象方法的接口。
2.1 常用函数式接口
// Predicate:接收一个参数,返回 boolean
Predicate<Integer> isPositive = num -> num > 0;
// Function:接收一个参数,返回一个结果
Function<String, Integer> stringToLength = str -> str.length();
// Consumer:接收一个参数,无返回值
Consumer<String> printer = message -> System.out.println(message);
// Supplier:无参数,返回一个结果
Supplier<Double> randomNumber = () -> Math.random();
3. Lambda 表达式进阶用法
3.1 方法引用
方法引用是 Lambda 表达式的一种简化写法:
// 静态方法引用
Function<String, Integer> parser = Integer::parseInt;
// 实例方法引用
String str = "Hello";
Supplier<Integer> lengthSupplier = str::length;
// 构造方法引用
Supplier<ArrayList<String>> listCreator = ArrayList::new;
3.2 复杂示例
public class LambdaExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
// 使用 Lambda 进行排序
names.sort((s1, s2) -> s1.compareToIgnoreCase(s2));
// 使用 Lambda 进行过滤和映射
names.stream()
.filter(name -> name.length() > 4)
.map(String::toUpperCase)
.forEach(System.out::println);
}
}
4. Lambda 表达式最佳实践
- 保持简洁:Lambda 表达式应该简短且清晰
- 使用类型推断:让编译器推断参数类型
- 优先使用方法引用:当 Lambda 表达式仅调用一个已存在的方法时
- 合理使用函数式接口:选择合适的函数式接口
4.1 实际应用示例
public class LambdaPractice {
public static void main(String[] args) {
List<Person> people = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Charlie", 35)
);
// 使用 Lambda 进行复杂操作
people.stream()
.filter(p -> p.getAge() > 28)
.sorted(Comparator.comparing(Person::getName))
.map(Person::getName)
.forEach(System.out::println);
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() { return name; }
public int getAge() { return age; }
}
5. 总结
Lambda 表达式的优点:
- 代码更加简洁
- 提高代码可读性
- 支持函数式编程
- 方便并行处理
注意事项:
- Lambda 表达式中的变量作用域
- 避免过度使用,保持代码可读性
- 注意性能影响
1092

被折叠的 条评论
为什么被折叠?



