目录
1. 什么是 Lambda 表达式?
1.1 Lambda 表达式的特点
1.2 Lambda 表达式的语法
2. Lambda 表达式的使用场景
3. Lambda 表达式简化代码的流程
3.1 替代匿名内部类
3.2 集合遍历
3.3 集合过滤与映射
3.4 排序集合
4. Lambda 表达式的优势
5. 总结
Lambda 表达式是 Java 8 引入的一种简洁的匿名函数表示方式。它允许你将函数作为参数传递给方法,或者将代码块作为数据处理。Lambda 表达式的主要目的是简化代码,尤其是在使用函数式接口时。
匿名函数:Lambda 表达式没有名称,但它有参数列表、函数体和返回类型。
简洁性:Lambda 表达式可以大幅减少代码量,尤其是在处理集合和函数式编程时。
函数式接口:Lambda 表达式通常与函数式接口(只有一个抽象方法的接口)一起使用。
Lambda 表达式的基本语法如下:
(parameters) -> expression
或者
(parameters) -> { statements; }
parameters:参数列表,可以为空。
->:Lambda 操作符,将参数列表与函数体分开。
expression 或 { statements; }:Lambda 表达式的函数体。如果只有一行代码,可以省略大括号和 return
关键字。
Lambda 表达式主要用于简化以下场景的代码:
替代匿名内部类:尤其是在实现函数式接口时。
集合操作:如遍历、过滤、映射等。
多线程编程:简化 Runnable
或 Callable
的实现。
下面通过几个示例,展示如何使用 Lambda 表达式逐步简化代码。
在 Java 8 之前,我们通常使用匿名内部类来实现函数式接口。例如,实现 Runnable
接口:
// 传统方式:使用匿名内部类
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("Hello, World!");
}
};
new Thread(runnable).start();
使用 Lambda 表达式后,代码可以简化为:
// 使用 Lambda 表达式
Runnable runnable = () -> System.out.println("Hello, World!");
new Thread(runnable).start();
甚至可以进一步简化为:
// 直接传递 Lambda 表达式
new Thread(() -> System.out.println("Hello, World!")).start();
在 Java 8 之前,遍历集合通常使用 for
循环或迭代器:
List list = Arrays.asList("Java", "Python", "C++");
// 传统方式:使用 for 循环
for (String language : list) {
System.out.println(language);
}
使用 Lambda 表达式后,可以借助 forEach
方法简化代码:
// 使用 Lambda 表达式
list.forEach(language -> System.out.println(language));
甚至可以进一步简化为方法引用:
// 使用方法引用
list.forEach(System.out::println);
在 Java 8 之前,过滤和映射集合需要编写大量代码。例如,过滤出长度大于 3 的字符串并转换为大写:
List list = Arrays.asList("Java", "Python", "C++");
List result = new ArrayList<>();
// 传统方式:使用 for 循环
for (String language : list) {
if (language.length() > 3) {
result.add(language.toUpperCase());
}
}
使用 Lambda 表达式和 Stream API 后,代码可以大幅简化:
// 使用 Lambda 表达式和 Stream API
List result = list.stream()
.filter(language -> language.length() > 3)
.map(String::toUpperCase)
.collect(Collectors.toList());
在 Java 8 之前,排序集合需要实现 Comparator
接口:
List list = Arrays.asList("Java", "Python", "C++");
// 传统方式:使用匿名内部类
Collections.sort(list, new Comparator() {
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
});
使用 Lambda 表达式后,代码可以简化为:
// 使用 Lambda 表达式
Collections.sort(list, (s1, s2) -> s1.compareTo(s2));
甚至可以进一步简化为:
// 使用方法引用
Collections.sort(list, String::compareTo);
代码简洁:Lambda 表达式大幅减少了代码量,尤其是在处理集合和函数式接口时。
可读性高:Lambda 表达式使代码更加直观和易读。
函数式编程:Lambda 表达式为 Java 引入了函数式编程的特性,使代码更加灵活。
Lambda 表达式是 Java 8 引入的一项重要特性,它通过简洁的语法和强大的功能,极大地简化了代码的编写。无论是替代匿名内部类、遍历集合,还是进行复杂的集合操作,Lambda 表达式都能显著提高代码的可读性和可维护性。