JAVA中的Lamda表达式
- Lambda 表达式的语法
- 使用场景
- 示例代码
- 1.代替匿名内部类
- 2. 带参数的 Lambda 表达式
- 3. 与集合框架结合使用
- 4. 使用 Stream 操作
- 总结
Java 的 Lambda 表达式是 Java 8 引入的一个新特性,用于简化代码,特别是在处理函数式编程时。Lambda 表达式提供了一种更简洁和灵活的方式来表示匿名函数(或称闭包)。
Lambda 表达式的语法
(parameters) -> expression
或
(parameters) -> { statements; }
- parameters:参数列表,可以为空,也可以有一个或多个参数。
- ->:箭头操作符,分隔参数列表和方法体。
- expression 或 statements:表示方法体,可以是单个表达式或多条语句(用大括号括起来)。
使用场景
Lambda 表达式主要用于简化接口实现,特别是函数式接口(即只有一个抽象方法的接口)。例如:
- 替代匿名内部类
- 配合集合框架的操作,如 stream、map、filter 等
示例代码
1.代替匿名内部类
传统写法:
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println("Hello, world!");
}
};
r1.run();
Lambda 表达式写法:
Runnable r2 = () -> System.out.println("Hello, world!");
r2.run();
2. 带参数的 Lambda 表达式
传统写法:
Comparator<Integer> comparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
};
Lambda 表达式写法:
Comparator<Integer> comparator = (o1, o2) -> o1 - o2;
3. 与集合框架结合使用
传统写法:
List<String> list = Arrays.asList("a", "b", "c");
for (String s : list) {
System.out.println(s);
}
Lambda 表达式写法:
List<String> list = Arrays.asList("a", "b", "c");
list.forEach(s -> System.out.println(s));
4. 使用 Stream 操作
使用 Lambda 表达式和 Stream API 可以方便地进行集合的过滤、映射和聚合操作:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println(evenNumbers); // 输出:[2, 4]
总结
Lambda 表达式简化了匿名类的语法,尤其在配合函数式接口和 Java 8 的 Stream API 时显得特别强大。它的主要优点包括:
- 代码简洁:减少冗余代码。
- 可读性提高:表达逻辑更加清晰。
- 便于函数式编程:与 Java 8 的新特性(如 Stream)结合使用效果最佳。
注意:
- Lambda 表达式只能用于函数式接口(只有一个抽象方法的接口)。
- 使用时需要注意上下文和类型推导的正确性。