Function 是 Java 8 的函数式接口,用于类型 T 到 R 的映射,核心方法为 R apply(T t),支持 Lambda 快速实现、andThen/compose 链式组合、Stream.map 批量转换及自定义无副作用实现。

Function 是 Java 8 引入的函数式接口,用于将一个类型的数据(T)映射为另一个类型的数据(R),核心方法是 R apply(T t)。它最常用于数据转换场景,比如字符串转整数、对象字段提取、数值计算等。
用 Lambda 表达式快速实现映射
无需定义新类,直接用 Lambda 就能创建 Function 实例:
-
把字符串转成长度:
Function<string integer> strLen = s -> s.length();</string> -
把整数翻倍:
Function<integer integer> doubleIt = x -> x * 2;</integer> -
从 User 对象取姓名:
Function<user string> getName = user -> user.getName();</user>
链式调用:andThen 与 compose
Function 支持组合操作,让多个转换逻辑串联起来:
-
andThen:先执行当前函数,再执行后续函数(顺序组合)
例如:strLen.andThen(x -> x + 10)→ 先算长度,再加 10 -
compose:先执行参数函数,再执行当前函数(逆序组合)
例如:doubleIt.compose(x -> x + 1)→ 先加 1,再翻倍
结合 Stream API 做批量转换
在 stream().map() 中,Function 是默认参数类型,非常自然:
立即学习“Java免费学习笔记(深入)”;
List<string> names = users.stream().map(getName).collect(Collectors.toList());</string>List<integer> lengths = words.stream().map(strLen).collect(Collectors.toList());</integer>- 也可嵌套使用:
stream().map(s -> s.toUpperCase()).map(String::length)
自定义 Function 实现复杂逻辑
当逻辑较复杂或需复用时,可写具体类实现 Function 接口:
- 实现
apply方法,明确输入输出类型 - 可在构造中传入配置参数,比如格式化模板、阈值等
- 注意保持无副作用(不修改外部状态,不依赖可变变量)


















