用 java 8 可选表达式替换两个三元运算符
replace two ternary operator by java 8 optional expression
我想用 java 8 可选表达式替换两个三元运算符
下面是两个三元运算符:
valueA 和 valueB 是字符串
valueA != null ? valueA.length() < 3 ? "0"+valueA : valueA : valueB
怎么做?
Optional
class包装一个空值或一个对象。使用 Optional
不会消除空值,也不能取代您的三元测试。但是,Optional
可能会简化您的三元组:参见 .
您可以简单地调用 Optional.ofNullable
并传递嵌套三元测试的结果。
Optional < String > optional =
Optional.ofNullable(
valueA != null ? valueA.length() < 3 ? "0" + valueA : valueA : valueB
)
;
(将 String
替换为上面代码中的特定数据类型。)
当我阅读你的三元组时,五种结果中的任何一种都是可能的:
- null(其中
valueA
为 null)
valueA
- 已修改
valueA
valueB
有对象
valueB
为空
我们对 Optional.ofNullable
的调用处理所有五个。
- 如果为空,则返回一个空
Optional
。
- 如果非空,则返回包含对象的
Optional
。
作为 , the original purpose to the Optional
class was for use as the return type of a method,当 null 是合法值而不是问题(错误、未知等)时发出信号。虽然您可以以其他方式自由使用 Optional
,但这样做可能是一个糟糕的选择。
试试这个。
String result = Optional.ofNullable(valueA)
.map(s -> s.length() < 3 ? "0" + s : s)
.orElse(valueB);
我想用 java 8 可选表达式替换两个三元运算符
下面是两个三元运算符:
valueA 和 valueB 是字符串
valueA != null ? valueA.length() < 3 ? "0"+valueA : valueA : valueB
怎么做?
Optional
class包装一个空值或一个对象。使用 Optional
不会消除空值,也不能取代您的三元测试。但是,Optional
可能会简化您的三元组:参见
您可以简单地调用 Optional.ofNullable
并传递嵌套三元测试的结果。
Optional < String > optional =
Optional.ofNullable(
valueA != null ? valueA.length() < 3 ? "0" + valueA : valueA : valueB
)
;
(将 String
替换为上面代码中的特定数据类型。)
当我阅读你的三元组时,五种结果中的任何一种都是可能的:
- null(其中
valueA
为 null) valueA
- 已修改
valueA
valueB
有对象valueB
为空
我们对 Optional.ofNullable
的调用处理所有五个。
- 如果为空,则返回一个空
Optional
。 - 如果非空,则返回包含对象的
Optional
。
作为 Optional
class was for use as the return type of a method,当 null 是合法值而不是问题(错误、未知等)时发出信号。虽然您可以以其他方式自由使用 Optional
,但这样做可能是一个糟糕的选择。
试试这个。
String result = Optional.ofNullable(valueA)
.map(s -> s.length() < 3 ? "0" + s : s)
.orElse(valueB);