Java中的lambda
Java 中的 Lambda
Lambda 表达式
是 Java 8 中引入的一个重要特性,它极大地简化了函数式编程。Lambda 表达式可以看作是一种匿名方法,它不需要像普通方法一样拥有名称、返回值类型和 return
语句。
基本语法
Lambda 表达式的基本语法如下:
(parameter1, parameter2, ..., parameterN) -> { statement1; statement2; ... }
其中,参数列表部分可以为空或非空。如果只有一个参数,则可省略掉括号;如果执行体语句仅有一条,则可省略 {}
。
举个例子:
// 无参数无返回值的 Lambda 表达式
() -> System.out.println("I am a lambda expression");
// 有一个参数的 Lambda 表达式
(name) -> System.out.println("Hello, " + name);
// 有多个参数的 Lambda 表达式
(int x, int y) -> System.out.println(x + y);
// 有返回值的 Lambda 表达式
(int x, int y) -> { return x + y; };
使用场景
Lambda 表达式可以帮助我们减少代码量,使代码更加简洁易懂,从而提升开发效率。
- 集合框架
Lambda 表达式在集合框架的各种操作中非常常见,例如:过滤器、排序器、迭代器等。使用 Lambda 表达式可以将集合框架的操作写得更加简洁。
// 使用 Lambda 表达式过滤列表中所有偶数
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6);
list.stream().filter(n -> n % 2 == 0).forEach(System.out::println);
// 将列表中的每个元素平方并输出结果
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6);
list.stream().map(n -> n * n).forEach(System.out::println);
- 线程与多线程
在多线程编程中,Lambda 表达式也被广泛应用。相对于传统的匿名内部类,Lambda表达式有明显的优势,其代码更加简洁易懂。
// 开启一个新线程
new Thread(() -> {
System.out.println("I am a new thread");
}).start();
- 方法引用
当某些方法较短或者重复度较高时,可以将这些方法封装为 Lambda 表达式。此时,我们可以使用方法引用语法来快速实现
// 这是一个静态方法
public class StringUtils {
public static boolean isBlank(String s) {
return s == null || "".equals(s.trim());
}
}
// 使用 Lambda 表达式调用 StringUtils 的 isBlank 静态方法
Predicate<String> predicate = (String s) -> StringUtils.isBlank(s);
List<String> list = Arrays.asList("hello", "", "world", null);
list.stream().filter(predicate).forEach(System.out::println);
// 使用方法引用调用 StringUtils 的 isBlank 静态方法
Predicate<String> predicate = StringUtils::isBlank;
List<String> list = Arrays.asList("hello", "", "world", null);
list.stream().filter(predicate).forEach(System.out::println);
以上就是 Java 中 Lambda 表达式的基础概念和使用场景。通过灵活使用 Lambda 表达式,我们可以使代码变得更加简洁、易读,从而提升开发效率。