从 Java 中的另一个函数内部返回一个函数
Returning a function from inside another function in Java
既然我们可以在 Java 编程语言中采用一些函数式编程概念,是否也可以编写一个 returns 另一个函数的函数? Since Higher order functions do that。就像 JavaScript ?
Here is一个Java脚本代码returns一个函数。
function magic() {
return function calc(x) { return x * 42; };
}
var answer = magic();
answer(1337); // 56154
是的,你可以
Function<String, Integer> getLengthFunction() {
return String::length;
}
你可以更进一步。例如。实施 currying:
static <T, U, R> Function<T, Function<U, R>> curry(BiFunction<T, U, R> f) {
return t -> u -> f.apply(t, u);
}
最接近的 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;
}
这是我不久前写的另一个例子。它 returns 一个基于提供的参数的转换函数。
// 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 编程语言中采用一些函数式编程概念,是否也可以编写一个 returns 另一个函数的函数? Since Higher order functions do that。就像 JavaScript ?
Here is一个Java脚本代码returns一个函数。
function magic() {
return function calc(x) { return x * 42; };
}
var answer = magic();
answer(1337); // 56154
是的,你可以
Function<String, Integer> getLengthFunction() {
return String::length;
}
你可以更进一步。例如。实施 currying:
static <T, U, R> Function<T, Function<U, R>> curry(BiFunction<T, U, R> f) {
return t -> u -> f.apply(t, u);
}
最接近的 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;
}
这是我不久前写的另一个例子。它 returns 一个基于提供的参数的转换函数。
// 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;
}