Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多参数Java 8的函数_Java_Lambda_Java 8 - Fatal编程技术网

多参数Java 8的函数

多参数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}; 我几乎可以肯定,您可以定义自己的功能接口(即,通常

我阅读了许多关于如何在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};
我几乎可以肯定,您可以定义自己的功能接口(即,通常创建一个新文件)来开发
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) {
    ...
}