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)

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

相关文章

  • Java中超过1000万数据就自动转为科学计数法的原因分析与解决方案

    Java中超过1000万数据就自动转为科学计数法的原因分析与解决方案

    在 Java 开发中,你是否遇到过这样的场景:当数值达到 1000 万(10^7)时,原本期望的整数格式突然变成了1.0E7这样的科学计数法?本文将深入分析背后的原因,并提供 3 种实用解决方案,帮你彻底解决这个问题,需要的朋友可以参考下
    2026-03-03
  • idea搭建mybatis环境配置全过程

    idea搭建mybatis环境配置全过程

    本文介绍了如何以IDEA搭建MyBatis环境配置的方法,包括步骤和注意事项,通过本文的介绍,可以轻松地以IDEA搭建MyBatis环境配置,提高开发效率
    2023-10-10
  • java使用Memcached简单教程

    java使用Memcached简单教程

    本文主要记录Memcached的一些基本使用和简单的Monitor,大家参考使用吧
    2013-12-12
  • SpringBoot+Redisson自定义注解一次解决重复提交问题

    SpringBoot+Redisson自定义注解一次解决重复提交问题

    项目中经常会出现重复提交的问题,本文主要介绍了SpringBoot+Redisson自定义注解一次解决重复提交问题,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • java实现文件断点续传下载功能

    java实现文件断点续传下载功能

    这篇文章主要为大家详细介绍了java实现文件断点续传下载功能的具体代码,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Java中的MarkerFilter的应用场景及使用示例详解

    Java中的MarkerFilter的应用场景及使用示例详解

    这篇文章主要介绍了Java中的MarkerFilter的应用场景及使用示例详解,使用log4j2,负责从消息队列收集日志的,现在系统收集到的日志能和这个系统本身的日志分开,需要的朋友可以参考下
    2024-01-01
  • SpringBoot从配置文件中获取属性的四种方法总结

    SpringBoot从配置文件中获取属性的四种方法总结

    这篇文章主要介绍了SpringBoot从配置文件中获取属性的四种方法总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • SpringBoot自定义注解使用读写分离Mysql数据库的实例教程

    SpringBoot自定义注解使用读写分离Mysql数据库的实例教程

    这篇文章主要给大家介绍了关于SpringBoot自定义注解使用读写分离Mysql数据库的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Spring的IOC控制反转详解

    Spring的IOC控制反转详解

    这篇文章主要为大家介绍了Spring的IOC控制反转,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助<BR>
    2022-01-01
  • Spring Cloud Feign组成配置过程解析

    Spring Cloud Feign组成配置过程解析

    这篇文章主要介绍了Spring Cloud Feign组成配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03

最新评论