Lambda 表达式是 Java 8 中引入的一种语法糖,用于简化使用函数式接口的代码编写。它使得 Java 编程更加简洁和灵活,特别是在处理集合数据、事件监听器等方面提供了便利。
Lambda 表达式的语法
Lambda 表达式的基本语法如下:
(parameters) -> expression
或者是一个代码块:
(parameters) -> { statements; }
其中:
- 参数列表:可以为空,也可以包含一个或多个参数。空参数列表使用空括号
()
表示,单个参数时可以省略括号。 - 箭头
->
:箭头符号将参数列表与 Lambda 表达式的主体分隔开。 - Lambda 主体:可以是一个表达式或一个代码块。如果是表达式,则表达式的结果即为 Lambda 表达式的返回值;如果是代码块,则需要使用
{}
括起来,并且需要显式地使用return
返回值。
Lambda 表达式的特性
-
简洁性:通过 Lambda 表达式可以显著减少代码量,特别是在使用函数式接口时,避免了冗长的匿名内部类语法。
-
函数式编程:Lambda 表达式支持函数式编程风格,即将函数作为一等公民(First-Class Citizen),可以像传递参数一样传递函数。
-
可读性:Lambda 表达式可以使代码更加清晰和易读,特别是在处理集合的操作(如遍历、筛选、映射等)时,可以将关注点集中在操作本身上。
-
并行处理:结合并行流(Parallel Streams)和 Lambda 表达式,可以方便地进行并行处理,提高程序的性能。
Lambda 表达式的应用场景
Lambda 表达式在以下场景中特别有用:
-
集合操作:如使用
forEach
、filter
、map
等方法对集合进行操作。
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
// 使用 Lambda 表达式遍历集合
names.forEach(name -> System.out.println("Hello, " + name));
// 使用 Lambda 表达式筛选集合
List<String> filteredNames = names.stream()
.filter(name -> name.startsWith("A"))
.collect(Collectors.toList());
事件监听器:如使用 Lambda 表达式简化事件处理代码。
button.addActionListener(event -> System.out.println("Button clicked"));
线程和并发处理:如使用 Lambda 表达式创建线程或者使用并行流进行并行处理。
// 创建线程
new Thread(() -> System.out.println("Hello from thread")).start();
// 并行处理
int sum = IntStream.range(1, 100)
.parallel()
.reduce(0, (a, b) -> a + b);
Lambda 表达式与函数式接口
Lambda 表达式本质上是对函数式接口(Functional Interface)的实现,函数式接口是指仅具有一个抽象方法的接口。Lambda 表达式可以通过上下文推断出其目标类型,即函数式接口的类型,从而创建实现该接口的对象。