Java 1.8 Supplier 函数式接口

更新时间 2023-07-18 17:13:06

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书活动

目前, 星球 内第一个项目:全栈前后端分离博客项目,演示地址:http://116.62.199.48/, 1.0 版本已经更新完毕,正在更新 2.0 版本。采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 224 小节,累计 35w+ 字,讲解图:1544 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 1000+ 小伙伴加入,欢迎点击围观

Supplier 接口代表一个不接受参数但返回结果的操作。它在 Java 中被广泛用于懒加载或产生随机值等场景。

本教程将深入介绍 Java 1.8 中的 Supplier 接口,并通过示例代码演示如何使用它。

Supplier 接口概览

java.util.function 包中,Supplier 接口定义如下:

@FunctionalInterface
public interface Supplier<T> {
    T get();
}
  • T 表示返回结果的类型。
  • get() 是 Supplier 接口中唯一的抽象方法,用于执行操作并返回结果。

Supplier 接口是一个泛型接口,它可以返回不同类型的结果。

使用 Supplier 接口

让我们通过几个示例来说明如何使用 Supplier 接口。

示例 1:产生随机数

创建一个 Supplier 接口实例,用于产生一个随机整数。

Supplier<Integer> randomNumberSupplier = () -> new Random().nextInt(100);
int randomNumber = randomNumberSupplier.get();
System.out.println("Random number: " + randomNumber);

在这个例子中,我们创建了一个 Supplier 对象 randomNumberSupplier,它将返回一个随机整数。我们调用 get() 方法来执行 Supplier,并产生一个随机整数并输出结果。

示例 2:懒加载

使用 Supplier 接口实现懒加载,只有在需要时才计算结果。

Supplier<String> lazyValueSupplier = () -> {
    // 复杂的计算过程
    System.out.println("Performing complex calculation...");
    // 返回结果
    return "Lazy value result";
};

// 只有在调用 get() 方法时,才会执行复杂计算
String lazyValue = lazyValueSupplier.get();
System.out.println(lazyValue);

在这个例子中,我们创建了一个 Supplier 对象 lazyValueSupplier,它代表了一个复杂的计算过程。在调用 get() 方法之前,不会进行实际的计算。只有在调用 get() 方法时,才会执行复杂计算并返回结果。

示例 3:产生序列号

使用 Supplier 接口实现产生序列号的功能。

AtomicInteger counter = new AtomicInteger();

Supplier<Integer> sequentialNumberSupplier = () -> counter.getAndIncrement();

// 产生序列号
int number1 = sequentialNumberSupplier.get();
int number2 = sequentialNumberSupplier.get();

System.out.println("Number 1: " + number1); // 输出 "Number 1: 0"
System.out.println("Number 2: " + number2); // 输出 "Number 2: 1"

在这个例子中,我们创建了一个 Supplier 对象 sequentialNumberSupplier,它使用 AtomicInteger 来产生序列号。每次调用 get() 方法,都会递增 counter 并返回递增后的值,从而实现序列号的生成。

总结

Java 1.8 中的 Supplier 接口为函数式编程提供了重要的支持。通过使用 Supplier 接口,我们可以轻松地定义并执行一个不接受参数但返回结果的操作。Supplier 接口特别适用于懒加载、产生随机值、序列号等场景。