function是java中用于一对一确定性数据转换的函数式接口,核心方法为r apply(t t),支持lambda、方法引用和匿名内部类实现,常用于集合映射、dto转换等场景。

Java 中 Function<t r></t> 是最常用的转换型函数式接口,用于将一种类型的数据映射为另一种类型。它只有一个抽象方法 R apply(T t),适合做一对一的、确定性的数据转换。
Function 的基本用法和实现方式
你可以通过 Lambda 表达式、方法引用或匿名内部类来实现 Function。Lambda 是最简洁的方式:
-
Lambda 实现:
Function<string integer> strToInt = s -> Integer.parseInt(s);</string> -
方法引用:
Function<string string> toUpper = String::toUpperCase;</string> -
匿名内部类(不推荐,冗长):
new Function<string boolean>() { public Boolean apply(String s) { return s != null && !s.trim().isEmpty(); } }</string>
常见数据映射场景示例
实际开发中,Function 常用于集合转换、DTO 与 Entity 映射、字段提取等:
- 把字符串列表转成整数列表:
list.stream().map(s -> Integer.valueOf(s)).collect(Collectors.toList()) - 从对象中提取某个属性:
Function<user string> getName = User::getName;</user>,再配合map(getName)使用 - 组合多个转换:
Function<string string> trimAndUpper = String::trim.andThen(String::toUpperCase);</string>
注意空值与异常处理
Function 本身不处理异常,也不约定是否接受 null。若转换逻辑可能抛出异常(如 parseInt),需自行包装或使用更安全的变体(如自定义 SafeFunction):
- 简单防护:
s -> s == null ? 0 : Integer.parseInt(s) - 捕获异常:
s -> { try { return Integer.parseInt(s); } catch (NumberFormatException e) { return -1; } } - 结合 Optional 可提升健壮性,但需额外封装,
Function接口本身不支持
与其他函数式接口的区别
别混淆类似接口:
-
UnaryOperator<t></t>是Function<t></t>的子接口,输入输出类型相同,比如字符串去空格、数字取绝对值 -
BiFunction<t></t>接收两个参数,适合需要上下文的映射(如(user, config) -> user.getName() + "@" + config.getDomain()) -
Supplier<r></r>和Consumer<t></t>不是转换接口:前者只产出,后者只消费,都不返回映射结果
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











