有没有lambda表达式可以用来替换 NaN 价值 0 或者 -1 在传递给函数时?我知道我可以为你开一张支票 NaN 这样地:
NaN
0
-1
if (Double.isNaN(variable_name)) { // make it 0 or -1 }
但我想用lambda表达式
function_to_called("variable_string", variable_double); // have a check if variable double is NaN
zwghvu4y1#
没有内置方法,因为在浮点运算中 NaN 常量表示未定义或不可表示的事物。这与特定值(如0或-1)不同。看到这个问题了吗 NaN 是。您应该自己用自己的方法编写正确的逻辑来处理它,就像您已经用 if 声明。
if
qacovj5a2#
你可以用一个三元组 ... ? ... : ... 而不是你的 if 检查并使其成为 lambda :
... ? ... : ...
lambda
Function<Double, Double> deNan = n -> Double.isNaN(n) ? -1 : n;
然而,虽然这是好的和短,这种方式你将不得不打电话 apply 上 Function 而不是直接调用函数,即 function_to_called("variable_string", deNan.apply(variable_double)); . 因此,您可以将其定义为常规方法,而不是lambda,这样就可以将其用作 deNan(variable_double) .另外,如前所述 NaN 具有“特殊”(或不那么特殊)的值,如 0 或者 -1 可能不是个好主意。相反,最好是过滤掉 NaN 或者“恰当地”处理它们,不管在你的场景中需要什么。
apply
Function
function_to_called("variable_string", deNan.apply(variable_double));
deNan(variable_double)
2条答案
按热度按时间zwghvu4y1#
没有内置方法,因为在浮点运算中
NaN
常量表示未定义或不可表示的事物。这与特定值(如0或-1)不同。看到这个问题了吗NaN
是。您应该自己用自己的方法编写正确的逻辑来处理它,就像您已经用
if
声明。qacovj5a2#
你可以用一个三元组
... ? ... : ...
而不是你的if
检查并使其成为lambda
:然而,虽然这是好的和短,这种方式你将不得不打电话
apply
上Function
而不是直接调用函数,即function_to_called("variable_string", deNan.apply(variable_double));
. 因此,您可以将其定义为常规方法,而不是lambda,这样就可以将其用作deNan(variable_double)
.另外,如前所述
NaN
具有“特殊”(或不那么特殊)的值,如0
或者-1
可能不是个好主意。相反,最好是过滤掉NaN
或者“恰当地”处理它们,不管在你的场景中需要什么。