多参数Java 8的函数
我阅读了许多关于如何在Java8中轻松定义lambda的示例。此lambda始终采用一个参数,如多参数Java 8的函数,java,lambda,java-8,Java,Lambda,Java 8,我阅读了许多关于如何在Java8中轻松定义lambda的示例。此lambda始终采用一个参数,如f1: Function<Integer,Integer> f1 = (x) -> Math.pow(x,2); 但是我找不到一种方法来定义一个具有可变数量参数的lambda,如f3: Function<Integer,Integer,Integer> f3 = (x,y) -> {return x + y}; 我几乎可以肯定,您可以定义自己的功能接口(即,通常
f1
:
Function<Integer,Integer> f1 = (x) -> Math.pow(x,2);
但是我找不到一种方法来定义一个具有可变数量参数的lambda,如f3
:
Function<Integer,Integer,Integer> f3 = (x,y) -> {return x + y};
我几乎可以肯定,您可以定义自己的功能接口(即,通常创建一个新文件)来开发f3
和f4
,但是有什么方法可以轻松定义它们吗 函数f3=(x,y)->{return x+y};
Function<Integer,Integer,Integer> f3 = (x,y) -> {return x + y};
实际上是一个双功能
及
函数f4=()->{return Math.random()};
是供应商
如果需要更多参数,请创建自己的函数,例如TriFunction
,具有两个参数的函数是:
双功能f3=(x,y)->x+y;
不带参数的函数是:
Supplier f4=()->Math.random();
或相当于:
Supplier<Double> f4 = Math::random;
供应商f4=数学::随机;
我几乎可以肯定,您可以定义自己的功能接口(即。,
创建一个新文件)来开发f3和f4,但是有一些吗
如何轻松定义它们
除了尤金的回答,我还要补充一点:
Function<Integer,Integer,Integer> f3 = (x,y) -> {return x + y};
但如果不委托给接受var args的方法,则更难使用:
VargsFunction<Integer, Integer> f = varg-> call(varg);
Integer call(Integer... varg) {
...
}
VargsFunction f=varg->call(varg);
整数调用(整数…变量){
...
}
或者,如果所有参数都是相同的类型,那么创建一个varargs版本:接口NAryFunction{R apply(T…T);}
@Andreas我并没有故意建议,我从来没有发现自己需要一个,所以我不确定。谢谢你
BiFunction<Integer, Integer, Integer> f3 = (x, y) -> x + y;
Supplier<Double> f4 = () -> Math.random();
Supplier<Double> f4 = Math::random;
Function<Integer,Integer,Integer> f3 = (x,y) -> {return x + y};
@FunctionalInterface
public interface VargsFunction<T,R> {
@SuppressWarnings("unchecked")
R apply(T... t);
}
VargsFunction<Integer, Integer> f = varg-> call(varg);
Integer call(Integer... varg) {
...
}