javascript之Java 8 lambda(来自 javascript 示例)
98°冷暖
阅读:45
2025-02-15 21:57:57
评论:0
我正在从 javascript 背景学习 java,我想知道是否可以在 Java 中编写类似的函数。以下是 javascript 中的示例:
function getBalance(side, date) {
let balance;
let getPrice = (f) => {
while ((result = f(date)) == 0) {
date++;
}
return result;
}
if (side) {
let price = getPrice(getPrice1);
// Some calculations
return balance;
} else {
let price = getPrice(getPrice2);
// Some calculations
return balance;
}
}
其中 getPrice1 和 getPrice2 是先前定义的函数。此处使用回调有助于保持代码简短。我不确定在 Java 中是否可以在不声明其他接口(interface)的情况下将函数作为参数传递。
我问这个问题是因为它是我遇到的真实任务的简化示例。您认为最优雅的解决方案是什么?
附:看起来功能接口(interface)是这里的方式。
请您参考如下方法:
这是一个看起来非常接近 javascript 代码的解决方案:
import java.time.LocalDate;
public class Showcase {
public static void main(String[] args) {
LocalDate date = LocalDate.now();
double result1 = getPrice(priceFunction1, date);
double result2 = getPrice(priceFunction2, date);
}
private static double getPrice(PriceFunction priceFunction, LocalDate date) {
return priceFunction.getPrice(date);
}
private static final PriceFunction priceFunction1 = date -> date.getYear() * 0.5;
private static final PriceFunction priceFunction2 = date -> date.getYear() * 1.5;
@FunctionalInterface
private interface PriceFunction {
double getPrice(LocalDate date);
}
}
而不是使用来自 java 语言的标准功能接口(interface),如
Function
,只需定义一个完全满足您的功能要求的新功能接口(interface):它需要一个日期并返回一个 double 值。
getPrice 函数将这样的“函数”作为第一个参数,然后我们必须传递日期(javascript 作用域使它更容易在那里......)。 “函数”本身是 lambda 表达式,我们可以将它们存储为字段或静态常量。
纯粹主义者可能会尖叫我没有为名称选择一个尖叫的案例,但为了便于阅读,我会故意偏离常见的命名约定。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。