【问题标题】:Lamda for checking NaN value while passing variable in a function用于在函数中传递变量时检查 NaN 值的 Lamda
【发布时间】:2020-12-22 17:29:30
【问题描述】:

是否有任何 lambda 表达式,通过它我可以将 NaN 值替换为 0-1,同时将其传递给函数?

我知道我可以像这样检查NaN

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

【问题讨论】:

  • 你的意思是n -> Double.isNaN(n) ? -1 : n
  • @tobias_k,这正是我所需要的。我忘了Ternary operators。请将其添加为答案。

标签: java nan


【解决方案1】:

您可以只使用三元 ... ? ... : ... 而不是 if 检查并将其设为 lambda

Function<Double, Double> deNan = n -> Double.isNaN(n) ? -1 : n;

然而,虽然这很好而且很简短,但这样你将不得不在Function 上调用apply,而不是直接调用该函数,即你必须调用function_to_called("variable_string", deNan.apply(variable_double));。因此,您可以将其定义为常规方法而不是 lambda,以便将其用作 deNan(variable_double)

另外,如前所述,将NaN 替换为像0-1 这样的“特殊”(或不那么特殊)值实际上可能不是一个好主意。相反,最好完全过滤掉 NaN 值,或者“正确”处理它们,无论您的场景需要什么。

【讨论】:

    【解决方案2】:

    没有内置方法,因为在Floating-point arithmetic NaN 中,常量代表undefined or unrepresentable。这与 0 或 -1 等特定值不同。请参阅 this question,它解释了 NaN 是什么。

    您应该通过在自己的方法中编写正确的逻辑来自己处理它,就像您已经对 if 语句所做的那样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-21
      • 2011-05-17
      • 1970-01-01
      • 2013-05-24
      • 2020-11-04
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      相关资源
      最近更新 更多