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
    }
}

核心区别总结

接口参数数量返回值抽象方法签名
Supplier0TT get()
Function<T,R>1 (T)RR apply(T t)
BiFunction<T,U,R>2 (T, U)RR apply(T t, U u)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java8的default方法详细介绍

    Java8的default方法详细介绍

    这篇文章主要介绍了Java8的default方法,详细介绍了什么是default方法,在多继承时的处理等,需要的朋友可以参考下
    2014-04-04
  • jacksonJson序列化Map时指定Long序列化为String的实践

    jacksonJson序列化Map时指定Long序列化为String的实践

    文章介绍了在前端接收Long类型数据时可能产生的经度问题,提出了在返回数据时将Long类型转换为String类型的方法,作者使用Jackson库并通过自定义SimpleModule来实现这一转换,此外,作者还讨论了在复杂情况下需要自定义序列化方法的场景,并分享了解决方案
    2026-01-01
  • Java SpringMVC自学自讲

    Java SpringMVC自学自讲

    本篇文章主要介绍了java SpringMVC——如何获取请求参数详解,详细的介绍了每种参数注解的用法及其实例。感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 基于java ssm springboot+mybatis酒庄内部管理系统设计和实现

    基于java ssm springboot+mybatis酒庄内部管理系统设计和实现

    这篇文章主要为大家详细介绍了java ssm springboot+mybatis实现酒店管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • java如何获取map中value的最大值

    java如何获取map中value的最大值

    这篇文章主要介绍了java如何获取map中value的最大值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Java编程中使用XFire框架调用WebService程序接口

    Java编程中使用XFire框架调用WebService程序接口

    这篇文章主要介绍了Java编程中使用XFire调用WebService程序接口的方法,WebService是一种跨编程语言和跨操作系统平台的远程调用技术,需要的朋友可以参考下
    2015-12-12
  • SpringMVC请求数据详解讲解

    SpringMVC请求数据详解讲解

    Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet,Spring MVC 角色划分清晰,分工明细,本章来讲解SpringMVC如何请求数据
    2022-07-07
  • Java实现LRU缓存算法的参考示例

    Java实现LRU缓存算法的参考示例

    这篇文章主要介绍了JAVA实现LRU缓存算法的参考示例,帮助大家根据需求实现算法,对大家的学习或工作有一定的参考价值,需要的朋友可以参考下
    2023-05-05
  • Java Hutool工具实现验证码生成及Excel文件的导入和导出

    Java Hutool工具实现验证码生成及Excel文件的导入和导出

    Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,本文主要介绍了使用Hutool工具实现验证码生成和excel文件的导入、导出,需要的朋友可参考一下
    2021-11-11
  • SpringBoot+Querydsl 框架实现复杂查询解析

    SpringBoot+Querydsl 框架实现复杂查询解析

    本篇主要将介绍的是利用spring query dsl框架实现的服务端查询解析和实现介绍,对SpringBoot Querydsl 查询操作感兴趣的朋友一起看看吧
    2022-05-05

最新评论