在Java中从另一个函数内部返回函数
既然我们可以在Java编程语言中采用一些函数式编程概念,那么还可以编写一个返回另一个函数的函数吗。就像JavaScript一样 返回函数的JavaScript代码 函数魔术{ 返回函数calcx{return x*42;}; } 答案=魔术; 答复1337;//56154 是的,你可以在Java中从另一个函数内部返回函数,java,functional-programming,higher-order-functions,functional-interface,Java,Functional Programming,Higher Order Functions,Functional Interface,既然我们可以在Java编程语言中采用一些函数式编程概念,那么还可以编写一个返回另一个函数的函数吗。就像JavaScript一样 返回函数的JavaScript代码 函数魔术{ 返回函数calcx{return x*42;}; } 答案=魔术; 答复1337;//56154 是的,你可以 Function<String, Integer> getLengthFunction() { return String::length; } 你可以更进一步。例如,实施: 是的,你可以
Function<String, Integer> getLengthFunction() {
return String::length;
}
你可以更进一步。例如,实施:
是的,你可以
Function<String, Integer> getLengthFunction() {
return String::length;
}
你可以更进一步。例如,实施:
最接近Java的等价物是:
public static void main(String[] args) {
UnaryOperator<Integer> answer = magic();
System.out.println(magic().apply(1337)); // 56154
System.out.println(answer.apply(1337)); // 56154
}
static UnaryOperator<Integer> magic() {
return x -> x * 42;
}
最接近Java的等价物是:
public static void main(String[] args) {
UnaryOperator<Integer> answer = magic();
System.out.println(magic().apply(1337)); // 56154
System.out.println(answer.apply(1337)); // 56154
}
static UnaryOperator<Integer> magic() {
return x -> x * 42;
}
这是我不久前写的另一个例子。它根据提供的参数返回一个转换函数
// generate a Celsius to Fahrenheit Converter.
DoubleUnaryOperator cToF = conversionGen(9 / 5., 32);
// Fahrenheit to Celsius
DoubleUnaryOperator fToC =
conversionGen(5 / 9., (-32 * 5 / 9.));
// kilometers to miles
DoubleUnaryOperator kiloToMiles = conversionGen(.6, 0);
// and pounds to Kilograms.
DoubleUnaryOperator lbsToKgms = conversionGen(1 / 2.2, 0);
现在你所要做的就是用一个参数调用它们
double farTemp = cToF.applyAsDouble(100);
double celTemp = fToC.applyAsDouble(212);
System.out.println(farTemp);
System.out.println(celTemp);
System.out.println(kiloToMiles.applyAsDouble(1500));
System.out.println(lbsToKgms.applyAsDouble(4.4));
印刷品
212.0
100.0
900.0
2.0
发电机
public static DoubleUnaryOperator conversionGen(double factor,
double base) {
return unit -> unit * factor + base;
}
这是我不久前写的另一个例子。它根据提供的参数返回一个转换函数
// generate a Celsius to Fahrenheit Converter.
DoubleUnaryOperator cToF = conversionGen(9 / 5., 32);
// Fahrenheit to Celsius
DoubleUnaryOperator fToC =
conversionGen(5 / 9., (-32 * 5 / 9.));
// kilometers to miles
DoubleUnaryOperator kiloToMiles = conversionGen(.6, 0);
// and pounds to Kilograms.
DoubleUnaryOperator lbsToKgms = conversionGen(1 / 2.2, 0);
现在你所要做的就是用一个参数调用它们
double farTemp = cToF.applyAsDouble(100);
double celTemp = fToC.applyAsDouble(212);
System.out.println(farTemp);
System.out.println(celTemp);
System.out.println(kiloToMiles.applyAsDouble(1500));
System.out.println(lbsToKgms.applyAsDouble(4.4));
印刷品
212.0
100.0
900.0
2.0
发电机
public static DoubleUnaryOperator conversionGen(double factor,
double base) {
return unit -> unit * factor + base;
}
这回答了你的问题吗@德伦没有德伦。这是另一个问题。我想知道在Java中是否可以从另一个函数内部返回一个函数。不在函数中定义函数,我们不能。当你说函数时,你是指函数接口的方法或实例吗?从技术上讲,你不能返回函数,但你可以返回表示函数的类的实例,在你的例子中是UnaryFunction。但这很难看。当我说函数时,我指的是@sepp2kd方法。这能回答你的问题吗@德伦没有德伦。这是另一个问题。我想知道在Java中是否可以从另一个函数内部返回一个函数。不在函数中定义函数,我们不能。当你说函数时,你是指函数接口的方法或实例吗?从技术上讲,你不能返回函数,但你可以返回表示函数的类的实例,在你的例子中是UnaryFunction。但这很难看。当我说一个函数时,我指的是一个方法@sepp2kYes,这是正确的,非常感谢你解释得很好的答案。我必须选择尼古拉斯的答案,因为这是根据我的问题的解释,而且很快。@KidusTekeste无需解释。重要的是你得到了你的答案。是的,这是正确的,非常感谢你解释得很好的答案。我必须选择尼古拉斯的答案,因为这是根据我的问题的解释,而且很快。@KidusTekeste无需解释。重要的是你得到了答案。这很漂亮,我以前从未见过这样的实现,是的,这是一个函数返回。非常感谢。但是Nikolas的回答是根据我的问题的例子给出的,这会让下一位读者明白。这很漂亮,我以前从未见过这样的实现,是的,这是一个函数返回。非常感谢。但尼古拉斯的回答是根据我的问题的例子,并将明确为下一个读者。