惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
N
Netflix TechBlog - Medium
P
Proofpoint News Feed
D
Docker
J
Java Code Geeks
L
LangChain Blog
Microsoft Security Blog
Microsoft Security Blog
The GitHub Blog
The GitHub Blog
I
InfoQ
Stack Overflow Blog
Stack Overflow Blog
云风的 BLOG
云风的 BLOG
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
月光博客
月光博客
T
Tailwind CSS Blog
M
MIT News - Artificial intelligence
Blog — PlanetScale
Blog — PlanetScale
Google DeepMind News
Google DeepMind News
腾讯CDC
罗磊的独立博客
U
Unit 42
爱范儿
爱范儿
Vercel News
Vercel News
MyScale Blog
MyScale Blog

博客园 - 轻舟软件

JSR303 常用校验注解(validation) 轻舟分公司协作平台:统一管理、高效协作 [ERR] 1118 - Row size too large (> 8126) IDEA中Java代码修改后及时生效的方法 python SQLite 访问组件 AI课堂笔记:AI编程 轻舟项目管理系统:台账・文件・协作・管控,让项目告别混乱,有序可控! 分公司项目的柔性管理(造价咨询、招标代理) 咨询行业——项目费用管控 咨询行业——项目管理模型 Java8:函数式接口、Lambda、Stream Java知识图谱(转) 简约至上 软件需求分析方法论(转) EasyUI的属性、事件、方法的使用 两位小数偶感 什么是函数? HQL分页查询、分组查询 MySql 、Oracle 获取表结构和字段信息 马云卸任演讲全文(2019-09-10) MySQL权限管理常用命令
函数式接口简介
轻舟软件 · 2026-08-13 · via 博客园 - 轻舟软件

java.util.function 是 Java 8 专门为 Lambda / Stream 提供的函数式接口包,一共只有 4 大类核心接口,剩下全是它们的变形。


一、4 个核心函数式接口

1. Supplier 提供者

  • 抽象方法:T get()
  • 作用:无入参,返回一个结果(造数据、懒加载)
  • 示例:
    Supplier<String> supplier = () -> "hello";
    String s = supplier.get();
    

2. Consumer 消费者

  • 抽象方法:void accept(T t)
  • 作用:接收一个参数,不返回值(消费、打印、修改、存库)
  • 示例:
    Consumer<String> consumer = System.out::println;
    consumer.accept("test");
    

3. Function<T, R> 函数

  • 抽象方法:R apply(T t)
  • 作用:接收一个参数,返回一个结果(转换、映射)
  • 示例:
    Function<String, Integer> fun = String::length;
    int len = fun.apply("abc");
    

4. Predicate 断言/判断

  • 抽象方法:boolean test(T t)
  • 作用:接收参数,返回布尔值(过滤、条件判断)
  • 示例:
    Predicate<String> pred = s -> s.length() > 3;
    boolean b = pred.test("abcd");
    

二、常用变形(记住规律即可)

1. 两个参数的版本

  • BiConsumer<T, U>void accept(T, U)
  • BiFunction<T, U, R>R apply(T, U)
  • BiPredicate<T, U>boolean test(T, U)

2. 基本数据类型优化(避免装箱)

  • IntFunction<R>LongFunction<R>DoubleFunction<R>
  • ToIntFunction<T>ToLongFunction<T>
  • IntConsumerLongConsumerIntPredicate

3. 输入输出同类型

  • UnaryOperator:继承 Function,T apply(T t)(一元运算)
  • BinaryOperator:继承 BiFunction,T apply(T t, T u)(二元运算,如求和)

三、对应 Stream 里的用法(最实用)

接口Stream 方法作用
Predicate filter() 过滤
Function<T, R> map() 映射转换
Consumer forEach()/peek() 遍历消费
Supplier generate() 生成流数据
BinaryOperator reduce() 聚合计算

四、一句话总结

  • Supplier:无中生有
  • Consumer:只进不出
  • Function:有进有出(转换)
  • Predicate:判断真假