146. Java Lambda 表达式 - 使用 Lambda 表达式实现正确的方法
1. 编写实现 Predicate<String> 的 Lambda 表达式
在 Java 8 之前,我们需要使用匿名类来实现接口方法,而现在可以使用 Lambda 表达式更加简洁地实现。Lambda 表达式的本质是对 函数式接口 的 唯一抽象方法 进行实现。
编写 Lambda 表达式的核心步骤:
- 确定
Lambda表达式的 目标类型,即所实现的 函数式接口。 - 找到该接口的 唯一抽象方法。
- 按照
Lambda语法 实现该方法。
示例 1:实现 Predicate<String>
需求:编写一个 Predicate<String>,当字符串的长度正好等于 3 时返回 true。
Predicate<String> 是一个函数式接口,其唯一的抽象方法是:
boolean test(String t);
我们可以编写 Lambda 表达式如下:
Predicate<String> predicate = (String s) -> {
return s.length() == 3;
};
2. 简化 Lambda 语法
Java 编译器能够推断类型,并且在特定情况下允许省略一些不必要的语法,使代码更简洁。
优化步骤:
- 省略参数类型:编译器可推断
s是String类型,因此(String s)可简化为(s)。 - 省略括号:当
Lambda只有一个参数时,括号可省略,(s)可进一步简化为s。 - 省略
{}和return:如果方法体只有一行代码,且该行代码直接返回结果,可省略{}和return。
最终,优化后的 Lambda 表达式如下:
Predicate<String> predicate = s -> s.length() == 3;
✅ 最佳实践:保持 Lambda 表达式 短小精悍,让代码更易读。
3. 实现 Consumer<String>
需求:创建一个 Consumer<String>,它接收一个 String 参数,并在控制台打印。
Consumer<T> 是一个函数式接口,其唯一的抽象方法是:
void accept(T t);
Lambda 表达式实现:
Consumer<String> print = s -> System.out.println(s);
示例代码:
print.accept("Hello, Lambda!");
// 输出: Hello, Lambda!
4. 实现 Runnable
需求:创建一个 Runnable,当执行 run 方法时,在控制台输出 I am running。
Runnable 是一个函数式接口,其唯一的抽象方法是:
void run();
Lambda 表达式实现:
Runnable runnable = () -> System.out.println("I am running");
示例代码:
new Thread(runnable).start();
// 输出: I am running
5. 其他 Lambda 示例
示例 1:Function<T, R> 计算平方值
需求:创建一个 Function<Integer, Integer>,计算输入整数的平方。
Function<T, R> 的抽象方法是:
R apply(T t);
Lambda 表达式:
Function<Integer, Integer> square = x -> x * x;
示例代码:
System.out.println(square.apply(5));
// 输出: 25
示例 2:BiFunction<T, U, R> 计算两个数的和
需求:创建一个 BiFunction<Integer, Integer, Integer>,计算两个整数的和。
BiFunction<T, U, R> 的抽象方法是:
R apply(T t, U u);
Lambda 表达式:
BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;
示例代码:
System.out.println(add.apply(3, 7));
// 输出: 10
6. 结论
✅ Lambda 表达式的优点:
- 代码更简洁,减少样板代码(如匿名类)。
- 让代码更加可读,提高开发效率。
- 结合 函数式接口,可以灵活实现函数式编程。
总结 Lambda 语法:
| 语法结构 | 示例 |
|---|---|
(参数列表) -> { 方法体 } | (String s) -> { return s.length(); } |
| 省略参数类型 | (s) -> { return s.length(); } |
| 单个参数时省略括号 | s -> { return s.length(); } |
单行方法体省略 {} 和 return | s -> s.length() |
Lambda 表达式在 Java 8 及以上版本广泛应用,建议熟练掌握,以提升代码质量! 🚀