Java原生函数式接口最多支持两个参数,处理三个参数需自定义TriFunction接口;该接口含单一抽象方法apply,支持泛型类型组合,可用Lambda实现并配合静态/默认方法增强功能。

Java 原生的函数式接口(如 Function、BiFunction)最多支持两个参数,要处理三个参数,必须自定义函数式接口。
定义三参数函数式接口
创建一个只含一个抽象方法、并用 @FunctionalInterface 标注的接口,比如计算三个 int 的和:
@FunctionalInterface
public interface TriFunction<T, U, V, R> {
R apply(T t, U u, V v);
}
泛型 T,U,V 对应三个输入类型,R 是返回类型。接口简洁、可复用,支持任意类型组合(如 TriFunction<String, Integer, Boolean, Double>)。
使用 Lambda 表达式实现
定义后可直接用 Lambda 赋值,无需额外类:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
基础用法:计算三整数之和
TriFunction<Integer, Integer, Integer, Integer> sum3 = (a, b, c) -> a + b + c;
调用:int result = sum3.apply(1, 2, 3); // 得到 6 -
灵活类型:混合类型,比如拼接字符串 + 数字转大写
TriFunction<String, Integer, Boolean, String> format = (s, n, upper) -> (upper ? s.toUpperCase() : s) + "-" + n;
配合方法引用或默认方法增强
可在接口中添加静态或默认方法提升实用性:
-
静态工厂方法:简化常见逻辑
static <T> TriFunction<T, T, T, T> max() { return (a, b, c) -> Stream.of(a, b, c).max(Comparator.naturalOrder()).orElse(null); } -
默认方法链式扩展:比如加个
andThen类似Functiondefault <R> TriFunction<T, U, V, R> andThen(Function<? super W, ? extends R> after) { ... }(需自行实现)
替代方案对比(不推荐但需了解)
有人尝试用嵌套 BiFunction 或包装对象(如 new Object[]{a,b,c}),但会牺牲类型安全和可读性。自定义接口更直接、IDE 支持好、编译期检查强。

















