Java 1.8 Supplier 函数式接口
一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 - 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/
截止目前, 星球 内专栏累计输出 66w+ 字,讲解图 2896+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2300+ 小伙伴加入学习 ,欢迎点击围观
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 接口特别适用于懒加载、产生随机值、序列号等场景。