function接口是java 8引入的函数式接口,用于“输入→处理→输出”的类型转换,核心方法为apply(t t),支持andthen与compose链式组合,广泛应用于数据映射、dto转换等场景。

Function 接口是 Java 8 引入的函数式接口,用于将一个类型的数据转换为另一个类型的数据,核心就是“输入 → 处理 → 输出”。 它只有一个抽象方法 apply(T t),接收一个参数并返回一个结果,非常适合做类型映射、数据加工等场景。
理解 Function 的基本用法
Function
- 可以直接用 Lambda 表达式实现:比如
Function<string integer> strToInt = s -> Integer.parseInt(s);</string> - 也可以用方法引用:比如
Function<string string> toUpper = String::toUpperCase;</string> - 调用时使用
apply()方法:如strToInt.apply("123")返回123(int 类型)
链式转换:用 andThen 与 compose 组合多个 Function
Function 支持组合操作,让转换逻辑更清晰、复用性更强。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
andThen(R after):先执行当前函数,再执行传入的函数。例如:Function<integer string> intToStr = i -> "num:" + i;<br> Function<string integer> strLen = s -> s.length();<br> Function<integer integer> pipeline = intToStr.andThen(strLen);<br> pipeline.apply(42); // 返回 "num:42".length() → 6</integer></string></integer>
-
compose(T before):先执行传入的函数,再执行当前函数。上面例子等价于:strLen.compose(intToStr).apply(42)
常见实用转换场景
实际开发中,Function 常用于集合处理、DTO 转 VO、字符串解析等。
- 列表映射:
list.stream().map(s -> s.trim().toLowerCase()).collect(Collectors.toList());中的 lambda 就是 Function - 对象字段提取:
Function<user string> getName = User::getName;</user>可用于排序或分组 - 安全转换(避免空指针):
Function<string integer> safeParse = s -> s == null ? 0 : Integer.valueOf(s);</string>
自定义 Function 的注意事项
虽然可以写匿名类或实现类,但绝大多数情况 Lambda 更简洁。若逻辑复杂,建议封装成独立方法再引用。
- 不要在 apply 中抛出受检异常(如 IOException),否则需包装成 RuntimeException
- Function 不承诺线程安全,多线程环境下注意共享状态
- 避免在 apply 中做耗时操作(如数据库查询),它设计初衷是轻量转换
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










