Java - 检查数字不为Null,否则赋默认字符串值

4

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

所涉及的值是一个双精度浮点数,如果该值为空,则默认值应为一个字符串。

我尝试使用以下方式,但失败了,因为".orElse"期望一个双精度浮点数(与"value"具有相同的数据类型)。 是否有任何Java方法可用于实现此目的?

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

3
一个好的三元运算符怎么样?(value != null) ? value : "not found" 可以表示为:若值不为空,则返回该值,否则返回“not found”。 - Liftoff
@David 这会导致类型错误。 - developer_hatch
1
如果你想要一个字符串,只需将其转换或构建为一个字符串 (value != null) ? ""+value : "not found" - Liftoff
1
可能是[Optional.ofNullable和方法链接]的重复问题(https://dev59.com/YFsW5IYBdhLWcg3wI0b7)。 - Oleksandr Pyrohov
4
这似乎是一个奇怪的概念——double类型的默认值应该是一个String。这有何用处? - user10762593
4个回答

7
你离目标不远,只需映射数值即可:
String strDouble = Optional.ofNullable(value).map(Objects::toString).orElse("not found");

1

您的方法的编译版本:

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

1
由于赋值运算符的左侧可以是Double或String类型,因此最好将其类型指定为Object。这样写是有效的:
Object value2 = Optional.<Object>ofNullable(value).orElse("not found");

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

0

这取决于你在拥有 null 值时想要做什么。

如果你可以使用默认的长整型数值,那么就使用你的方法,而不是将字符串放入 orElse 中,而是将默认值放入其中。

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

如果没有值是你无法容忍的状态,那么你可以使用 Optional::orElseThrow 抛出异常。

最后,如果你只想在确实拥有值时执行某些操作,请查看 Optional::ifPresent - 它最适合这种情况。


如果您能更详细地描述您的用例,我会尝试微调这个答案以更好地适应您的需求。
这些都是Java 8的API,但在后续版本中,您将拥有更多的灵活性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接