【问题标题】:Using Java lambda expression [closed]使用 Java lambda 表达式 [关闭]
【发布时间】:2017-11-12 22:00:16
【问题描述】:

这些是 JavaScript:

function toCelsius(fahrenheit) {
    return (5/9) * (fahrenheit-32);
}
function area(radius)   
    {  
        return Math.PI * radius * radius;  
    };  

如何使用 Lambda 表达式在 Java 中做同样的事情?到目前为止,我的理解是这样的:

(int fahrenheit) -> (5/9) * (fahrenheit-32);

但它显示错误(非法启动类型),我猜它不正确。

【问题讨论】:

  • 第 1 步:打开 IDE。第二步:编写代码。第 3 步:利润! (如果您想获得更好的答案,请阅读我们的 SO Question Checklistedit 您的问题。)

标签: java lambda


【解决方案1】:

Java 有一个通用接口Function<T,R>,您可以在此处使用它来存储它们。第一个类型参数是函数输入的类型,第二个是函数返回值的类型。

你可以把你的函数写成

Function<Double,Double> toCelsius = fahrenheit -> 5 * ( fahrenheit - 32 ) / 9;
Function<Double,Double> findArea = radius -> radius * radius * Math.PI;

然后当你想使用它们时,你可以写类似的东西

double freezing = toCelsius.apply(32);
double pizzaSize = findArea.apply(11);

附带说明,不要在 Java 中写 5 / 9 - 这是 int 类型的表达式,其值为 0

【讨论】:

    【解决方案2】:

    使用UnaryOperator&lt;Double&gt;lambda 你可以这样做:

    UnaryOperator<Double> toCelsius = f -> (5 / 9.0) * (f - 32);
    UnaryOperator<Double> area = r -> Math.PI * r * r;
    
    System.out.println(toCelsius.apply(50.0));  // 10.0
    System.out.println(area.apply(10.0));       // 314.159265...
    

    UnaryOperator&lt;Double&gt;Function&lt;Double, Double&gt; 相同

    【讨论】:

      【解决方案3】:

      我将使用DoubleUnaryOperator 功能接口来执行手头的任务,并且在执行计算时还具有将原始类型装箱到其相应的包装器类型的好处,反之亦然。

      示例:

      DoubleUnaryOperator toCelsius = f -> 5 * (f - 32) / 9;
      DoubleUnaryOperator findArea = r -> r * r * Math.PI;
      

      检索结果:

      double celcius = toCelsius.applyAsDouble(40);
      double area = findArea.applyAsDouble(24);
      

      【讨论】:

        猜你喜欢
        • 2022-11-14
        • 1970-01-01
        • 2020-07-17
        • 1970-01-01
        • 1970-01-01
        • 2010-10-14
        • 1970-01-01
        • 1970-01-01
        • 2023-01-31
        相关资源
        最近更新 更多