在Java中,什么类型表示带有3个参数的函数或lambda表达式?

时间:2015-03-11 05:23:10

标签: java c# lambda java-8

Java 8的0参数函数为Supplier<T>,1参数函数为Function<T, R>,2参数函数为BiFunction<T, U, R>

什么类型表示带有3个参数的函数或lambda表达式,如

SomeType lambda = (int x, double y, String z) -> x; // what is SomeType?

在C#中,Func<T, TResult>重载最多16个参数,因此我们可以编写

Func<int, double, string, int> lambda = (int x, double y, string z) => x;

Java标准库是否提供类似的东西,或者您是否必须编写自己的“TriFunction”接口来处理具有3个参数的函数?

2 个答案:

答案 0 :(得分:6)

您必须编写自己的功能界面。 JDK没有提供这样的实现。

请注意,您始终可以使用现有类型

撰写类似TriFunction的内容
Function<Integer, Function<Double, Function<String, Integer>>> func =
  i -> d -> s -> i + d.intValue() + Integer.parseInt(s);//whatever random implementation
func.apply(42).apply(1.5).apply("1234");

答案 1 :(得分:3)

JDK只能用于BiFunctions,但没有什么能阻止你创建TriFunction:

@FunctionalInterface public interface TriFunction<T1, T2, T3, R> {
  R apply(T1 v1, T2 v2, T3 v3);
}

TriFunction<Integer, Double, String, Integer> f = (i, d, s) -> i;

或者,如果您需要N最多为8的Nunction,您可以使用jOOλ a Function3 interface(以及最多可以使用的Function8和TupleN)。