用 java 8 可选表达式替换两个三元运算符

replace two ternary operator by java 8 optional expression

我想用 java 8 可选表达式替换两个三元运算符

下面是两个三元运算符:

valueA 和 valueB 是字符串

valueA != null ? valueA.length() < 3 ? "0"+valueA : valueA : valueB

怎么做?

Optionalclass包装一个空值或一个对象。使用 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);