146. Java Lambda 表达式 - 使用 Lambda 表达式实现正确的方法

45 阅读3分钟

146. Java Lambda 表达式 - 使用 Lambda 表达式实现正确的方法

1. 编写实现 Predicate<String>Lambda 表达式

Java 8 之前,我们需要使用匿名类来实现接口方法,而现在可以使用 Lambda 表达式更加简洁地实现。Lambda 表达式的本质是对 函数式接口唯一抽象方法 进行实现。

编写 Lambda 表达式的核心步骤:

  1. 确定 Lambda 表达式的 目标类型,即所实现的 函数式接口
  2. 找到该接口的 唯一抽象方法
  3. 按照 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 编译器能够推断类型,并且在特定情况下允许省略一些不必要的语法,使代码更简洁。

优化步骤

  1. 省略参数类型:编译器可推断 sString 类型,因此 (String s) 可简化为 (s)
  2. 省略括号:当 Lambda 只有一个参数时,括号可省略,(s) 可进一步简化为 s
  3. 省略 {}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(); }
单行方法体省略 {}returns -> s.length()

Lambda 表达式在 Java 8 及以上版本广泛应用,建议熟练掌握,以提升代码质量! 🚀