我必须在两个String变量之间进行选择-第一个变量具有非null
值。
如果它们都是null
-那么我想退出该方法。
可以通过下面的代码来完成:
String value1 = <get from somewhere>
String value2 = <get from somewhere else>
String target = null;
if (value1 != null) target = value1;
else if (value2 != null) target = value2;
if (target == null) return null;
也可以用简短的形式完成
String target = value1 != null ? value1 : value2 != null ? value2 : null;
if (target == null) return null;
我正在努力使用Optional
以流利的形式做到这一点
注意:我只能使用Java 8语法(因此不能使用Optional.or()
)
答案 0 :(得分:5)
String target = Optional.ofNullable(value1).orElse(value2)
如果value1 == null
,则返回value2
-具有值或为空。无需通过将其映射为null来显式处理value2 == null
的情况。
答案 1 :(得分:4)
如果只有两种选择,可以使用以下方法实现:
target = Optional.ofNullable(value1)
.orElseGet(() -> Optional.ofNullable(value2).orElse(null));
即使可以将其用于两个以上的变量。
使用Java-9,可以使它更具可读性:
target = Optional.ofNullable(value1)
.or(() -> Optional.ofNullable(value2))
.orElse(null);
另一个答案确实有一个很好的观点;因此,可以进一步简化为根本不使用Optional
,只需一行:
target = value1 != null ? value1 : value2;
答案 2 :(得分:0)
如果你想检查 AND 条件
Optional.ofNullable(value)
.filter( res -> StringUtils.isNotEmpty((CharSequence) val.get()))
.ifPresent( finalResul -> {
//apply logic
});