news 2026/5/1 11:42:53

Java四大核心函数式接口详解:Supplier、Consumer、Function、Predicate

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java四大核心函数式接口详解:Supplier、Consumer、Function、Predicate

Java四大核心函数式接口详解

Java 8引入了函数式编程的支持,其中四大核心函数式接口(SupplierConsumerFunctionPredicate)是Lambda表达式和方法引用的基础。这些接口均位于java.util.function包中。


Supplier:无参供给型接口

Supplier<T>表示一个不接收参数但返回结果的供给操作。常用于延迟计算或生成值。

方法签名

T get();

示例

Supplier<String> randomString = () -> UUID.randomUUID().toString(); System.out.println(randomString.get()); // 输出随机UUID字符串

典型场景

  • 惰性初始化或缓存
  • 工厂模式生成对象

Consumer:单参消费型接口

Consumer<T>接收一个参数但不返回结果,用于消费数据。

方法签名

void accept(T t);

默认方法

default Consumer<T> andThen(Consumer<? super T> after)

示例

Consumer<String> printUpperCase = s -> System.out.println(s.toUpperCase()); printUpperCase.accept("hello"); // 输出"HELLO" // 链式调用 Consumer<String> printAndLog = printUpperCase.andThen(s -> System.out.println("Logged: " + s)); printAndLog.accept("world");

典型场景

  • 集合遍历(如List.forEach
  • 日志记录或通知

Function:单参转换型接口

Function<T, R>接收一个参数并返回结果,用于数据转换。

方法签名

R apply(T t);

默认方法

default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) default <V> Function<V, R> compose(Function<? super V, ? extends T> before)

示例

Function<String, Integer> parseToInt = Integer::parseInt; int num = parseToInt.apply("123"); // 返回123 // 链式调用 Function<String, String> toUpperAndTrim = s -> s.toUpperCase().trim(); Function<String, Integer> pipeline = toUpperAndTrim.andThen(String::length); int length = pipeline.apply(" abc "); // 返回3

典型场景

  • 数据转换(如字符串处理)
  • Stream API中的map操作

Predicate:单参断言型接口

Predicate<T>接收一个参数并返回布尔值,用于条件判断。

方法签名

boolean test(T t);

默认方法

default Predicate<T> and(Predicate<? super T> other) default Predicate<T> or(Predicate<? super T> other) default Predicate<T> negate()

示例

Predicate<String> isLong = s -> s.length() > 5; boolean result = isLong.test("hello world"); // 返回true // 组合条件 Predicate<String> isLongAndStartsWithH = isLong.and(s -> s.startsWith("h")); boolean combinedResult = isLongAndStartsWithH.test("hello"); // 返回false

典型场景

  • 集合过滤(如Stream.filter
  • 验证逻辑(如参数校验)

总结对比

接口方法签名输入参数返回值典型用途
Supplier<T>T get()T生成值
Consumer<T>void accept(T)T消费数据
Function<T,R>R apply(T)TR数据转换
Predicate<T>boolean test(T)Tboolean条件判断

通过灵活组合这些接口,可以显著减少样板代码并提升代码可读性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 3:58:37

新手也能看懂的SMT避坑指南!

眺望电子专注嵌入式处理器模组的研发与应用&#xff0c;服务于企业产品项目研发落地。因此&#xff0c;提供基于飞书系统的核心板二次开发资料包&#xff0c;其中硬件部分则包含接口载板原理图与PCB封装库等等。在使用核心板设计载板的SMT贴片生产环节&#xff0c;我们常会遇到…

作者头像 李华
网站建设 2026/5/1 3:59:33

FPC面板利用率优化:降本增效的关键技巧

FPC 电路板的生产成本&#xff0c;很大程度上取决于面板利用率。FPC 生产是在整张基材面板上排版&#xff0c;利用率越高&#xff0c;单块 FPC 的成本越低。很多厂家因为排版不合理、设计不优化&#xff0c;导致面板利用率只有 50%-60%&#xff0c;浪费大量材料&#xff0c;成本…

作者头像 李华
网站建设 2026/5/1 3:58:37

S是开关状态组合的列表,比如[1,0,0,1,1,0

三相逆变器模型预测控制 三相桥及电网采用数学元件搭建&#xff08;非电气元件&#xff09; 仿真速度快最近在搞三相逆变器的模型预测控制&#xff08;MPC&#xff09;&#xff0c;发现用纯数学建模代替传统电气元件仿真简直打开了新世界的大门。传统Simulink里拖几个IGBT搭桥虽…

作者头像 李华
网站建设 2026/5/1 4:00:10

大模型如何调用外部工具:LangChain Tools 模块详解[特殊字符]️

在当前大语言模型&#xff08;LLM&#xff09;快速发展的背景下&#xff0c;仅仅依靠模型内部的知识已无法满足复杂任务的需求。为了让模型具备“动手能力”&#xff0c;即能与外部系统交互、获取实时数据或执行计算操作&#xff0c;工具调用&#xff08;Tool Calling&#xff…

作者头像 李华
网站建设 2026/4/30 11:51:33

平面阵列天线波束形成的Matlab仿真实现

一、平面阵列天线建模 平面阵列天线通常由MN个阵元组成&#xff0c;均匀分布在x-y平面上。其方向图可通过二维Kronecker积实现方位角&#xff08;θ&#xff09;和俯仰角&#xff08;φ&#xff09;的联合控制。 1. 阵列几何模型 % 参数设置 M 8; % 行数&#xff08;俯仰…

作者头像 李华
网站建设 2026/5/1 3:58:37

AI写论文的宝藏工具!4款AI论文生成利器,为论文创作加速!

AI论文写作工具推荐 对于期刊论文写作&#xff0c;是否感到束手无策&#xff1f;在面对大量文献、繁琐的格式要求与不断的修改中&#xff0c;效率低下似乎成了科研人员的常态&#xff01;别担心&#xff0c;下面将为您介绍四款实测推荐的AI论文写作工具&#xff0c;涵盖从文献…

作者头像 李华