java中Supplier、Function、BiFunction的区别及说明
更新时间:2026年04月30日 09:05:40 作者:布卡布卡昵
Supplier、Function、BiFunction是Java函数式编程中常用的三个接口,它们分别用于无参数返回值、单参数返回值和双参数返回值的抽象函数定义
Supplier、Function、BiFunction区别
在 Java 中,Supplier、Function、BiFunction 是 java.util.function 包下的三个核心函数式接口,它们的主要区别在于参数数量和返回值类型:
1、Supplier
- 功能:不接受参数,仅返回一个值(供应一个结果)。
- 抽象方法:T get()
- 适用场景:延迟计算、生成数据、工厂模式等。
示例:
import java.util.function.Supplier;
public class SupplierExample {
public static void main(String[] args) {
// 供应一个随机数
Supplier<Integer> randomSupplier = () -> (int) (Math.random() * 100);
System.out.println(randomSupplier.get()); // 每次调用可能返回不同的值
}
}
2、Function<T, R>
- 功能:接受一个参数(类型 T),返回一个结果(类型 R)。
- 抽象方法:R apply(T t)
- 适用场景:数据转换、映射操作等。
示例:
import java.util.function.Function;
public class FunctionExample {
public static void main(String[] args) {
// 将字符串转换为其长度
Function<String, Integer> lengthFunction = s -> s.length();
System.out.println(lengthFunction.apply("Hello")); // 输出:5
}
}
3、BiFunction<T, U, R>
- 功能:接受两个参数(类型 T 和 U),返回一个结果(类型 R)。
- 抽象方法:R apply(T t, U u)
- 适用场景:需要处理两个输入的计算,如合并数据、比较等。
示例:
import java.util.function.BiFunction;
public class BiFunctionExample {
public static void main(String[] args) {
// 计算两个整数的和
BiFunction<Integer, Integer, Integer> sumFunction = (a, b) -> a + b;
System.out.println(sumFunction.apply(3, 5)); // 输出:8
}
}
核心区别总结
| 接口 | 参数数量 | 返回值 | 抽象方法签名 |
|---|---|---|---|
| Supplier | 0 | T | T get() |
| Function<T,R> | 1 (T) | R | R apply(T t) |
| BiFunction<T,U,R> | 2 (T, U) | R | R apply(T t, U u) |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
jacksonJson序列化Map时指定Long序列化为String的实践
文章介绍了在前端接收Long类型数据时可能产生的经度问题,提出了在返回数据时将Long类型转换为String类型的方法,作者使用Jackson库并通过自定义SimpleModule来实现这一转换,此外,作者还讨论了在复杂情况下需要自定义序列化方法的场景,并分享了解决方案2026-01-01
基于java ssm springboot+mybatis酒庄内部管理系统设计和实现
这篇文章主要为大家详细介绍了java ssm springboot+mybatis实现酒店管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2021-08-08
Java编程中使用XFire框架调用WebService程序接口
这篇文章主要介绍了Java编程中使用XFire调用WebService程序接口的方法,WebService是一种跨编程语言和跨操作系统平台的远程调用技术,需要的朋友可以参考下2015-12-12
Java Hutool工具实现验证码生成及Excel文件的导入和导出
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,本文主要介绍了使用Hutool工具实现验证码生成和excel文件的导入、导出,需要的朋友可参考一下2021-11-11
SpringBoot+Querydsl 框架实现复杂查询解析
本篇主要将介绍的是利用spring query dsl框架实现的服务端查询解析和实现介绍,对SpringBoot Querydsl 查询操作感兴趣的朋友一起看看吧2022-05-05


最新评论