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

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


吃鸡游戏
浏览 221回答 3
3回答

慕村225694

String&nbsp;target&nbsp;=&nbsp;Optional.ofNullable(value1).orElse(value2)如果value1 == null,则返回value2- 具有值或为空。不需要value2 == null通过将其映射到 null来显式处理这种情况。

猛跑小猪

如果你只有两个选择,你可以这样做:target = Optional.ofNullable(value1)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .orElseGet(() -> Optional.ofNullable(value2).orElse(null));即使这可以用于两个以上的变量。使用 java-9,这可以变得更具可读性:target = Optional.ofNullable(value1)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .or(() -> Optional.ofNullable(value2))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .orElse(null);确实,另一个答案有一个很好的观点;因此,这可以进一步简化为根本不使用Optionals,仍然是一行:&nbsp;target = value1 != null ? value1 : value2;

回首忆惘然

如果你想检查 AND 条件Optional.ofNullable(value)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .filter( res -> StringUtils.isNotEmpty((CharSequence) val.get()))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .ifPresent( finalResul -> {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //apply logic&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java