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

Sha*_*her 7 java optional 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;
Run Code Online (Sandbox Code Playgroud)

它也可以用简短的形式完成:

String target = value1 != null ? value1 : value2 != null ? value2 : null;
if (target == null) return null;
Run Code Online (Sandbox Code Playgroud)

我正在努力学习如何以流畅的形式使用Optional
注意:我只能使用Java 8语法(所以没有Optional.or())

Eug*_*ene 8

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

target = Optional.ofNullable(value1)
            .orElseGet(() -> Optional.ofNullable(value2).orElse(null));
Run Code Online (Sandbox Code Playgroud)

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

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

target = Optional.ofNullable(value1)
            .or(() -> Optional.ofNullable(value2))
            .orElse(null);
Run Code Online (Sandbox Code Playgroud)

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

 target = value1 != null ? value1 : value2;
Run Code Online (Sandbox Code Playgroud)

  • @Michael,当我有更多时间并以全新的心态重新阅读它们时,我必须重新阅读它们,但是这个地方不是我们应该始终同意的地方-您认为是重复的,请(再次)关闭它,不合时宜也被删除了,我没有任何冒犯。谢谢你的评论 (2认同)

dav*_* a. 7

String target = Optional.ofNullable(value1).orElse(value2)
Run Code Online (Sandbox Code Playgroud)

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