使用Java lambda表达式

时间:2017-11-12 22:00:17

标签: java lambda

这些是JavaScript:

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

如何使用Lambda Expression在Java中执行相同的操作?到目前为止,我理解的是这样的:

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

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

3 个答案:

答案 0 :(得分:0)

使用UnaryOperator<Double>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<Double>Function<Double, Double>

相同

答案 1 :(得分:0)

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

您可以将您的功能编写为

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 :(得分:0)

我使用DoubleUnaryOperator功能界面来执行手头的任务,并且在执行计算时还具有 not 装箱原始类型到其对应的包装类型的优点,反之亦然

示例:

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

检索结果:

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