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 表达式,我们可以将它们存储为字段或静态常量。

纯粹主义者可能会尖叫我没有为名称选择一个尖叫的案例,但为了便于阅读,我会故意偏离常见的命名约定。


标签:JavaScript
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号