这些是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);
但它显示错误(非法启动类型),我猜它不正确。
答案 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);