【问题标题】:Java - Check Not Null for a number, else assign default string valueJava - 为数字检查 Not Null,否则分配默认字符串值
【发布时间】:2023-04-10 11:20:01
【问题描述】:

我正在寻找一种方法来根据值是否为空来设置变量的默认值。

有问题的值是一个双精度值,默认值(如果该值为空)应该是一个字符串。

我尝试使用以下方式,但失败了,因为 .orElse 需要一个双精度(又名与“值”相同的数据类型)。 我可以使用任何 Java 方法来实现这一点吗?

Double value = 8.0;
Optional.ofNullable(value).orElse("not found")

【问题讨论】:

  • 一个好的旧三元怎么样? (value != null) ? value : "not found"
  • @David 给出类型错误
  • 如果你想要一个字符串,只需将它转换或构建成一个字符串(value != null) ? ""+value : "not found"
  • 这似乎是一个奇怪的概念——double 的默认值应该是String。为什么这很有用?

标签: java java-8 optional


【解决方案1】:

你不远,只映射值:

String strDouble = Optional.ofNullable(value).map(Objects::toString).orElse("not found");

【讨论】:

    【解决方案2】:

    由于赋值运算符的左侧可以是DoubleString,因此最好将其类型指定为Object

    这将起作用:

    Object value2 = Optional.<Object>ofNullable(value).orElse("not found");
    

    (即DoubleString 的类层次结构中唯一的共享类是Object)

    【讨论】:

      【解决方案3】:

      编译的方法版本:

      Object result = Optional.<Object>ofNullable(value).orElse("not found");
      

      【讨论】:

        【解决方案4】:

        这取决于当你有 null 时你想做什么。

        如果您可以使用默认长值 - 然后使用您的方法,而不是字符串,将默认值放在 orElse 中。

        如果您只想知道是否传递了 null,如果是,请执行不同的操作,但您不想使用 ==null,您可以在 if 中使用 Optional::isPresent 调用。

        如果没有值不是您可以容忍的状态,您可以使用Optional::orElseThrow 抛出异常。

        最后,如果你只是想做某事,如果你确实有价值,看看Optional::ifPresent——它最适合这个场景。


        如果您更详细地说明您的用例,我会尝试微调这个答案以更好地适应。

        这些都是 java 8 的 API,在以后的版本中你会有更多的灵活性。

        【讨论】:

          猜你喜欢
          • 2015-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-09
          • 2018-10-22
          • 1970-01-01
          • 2020-10-17
          • 2013-01-21
          相关资源
          最近更新 更多