为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

吃鸡游戏 2021-11-11 16:11:45
我必须在两个 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 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

String target = Optional.ofNullable(value1).orElse(value2)

如果value1 == null,则返回value2- 具有值或为空。不需要value2 == null通过将其映射到 null来显式处理这种情况。


查看完整回答
反对 回复 2021-11-11
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

如果你只有两个选择,你可以这样做:


target = Optional.ofNullable(value1)

            .orElseGet(() -> Optional.ofNullable(value2).orElse(null));

即使这可以用于两个以上的变量。


使用 java-9,这可以变得更具可读性:


target = Optional.ofNullable(value1)

            .or(() -> Optional.ofNullable(value2))

            .orElse(null);

确实,另一个答案有一个很好的观点;因此,这可以进一步简化为根本不使用Optionals,仍然是一行:


 target = value1 != null ? value1 : value2;


查看完整回答
反对 回复 2021-11-11
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

如果你想检查 AND 条件


Optional.ofNullable(value)

                    .filter( res -> StringUtils.isNotEmpty((CharSequence) val.get()))

                    .ifPresent( finalResul -> {

                        //apply logic

                    });


查看完整回答
反对 回复 2021-11-11
  • 3 回答
  • 0 关注
  • 216 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信