Java 8可选:在两个可能为空的值之间选择

时间:2018-10-11 09:39:01

标签: java java-8 optional

我必须在两个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()

3 个答案:

答案 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
                    });