我有下面的代码,对于多个空检查来说有点难看。
String s = null;
if (str1 != null) {
s = str1;
} else if (str2 != null) {
s = str2;
} else if (str3 != null) {
s = str3;
} else {
s = str4;
}
因此,我尝试使用Optional.ofNullable
如下所示的方法,但是如果有人阅读了我的代码,仍然很难理解。用Java 8最好的方法是什么
String s = Optional.ofNullable(str1)
.orElse(Optional.ofNullable(str2)
.orElse(Optional.ofNullable(str3)
.orElse(str4)));
在Java 9中,我们可以使用Optional.ofNullable
with OR
,但是在Java8中,还有其他方法吗?
@ OleV.V。没错,OP已经意识到了这一点,并且正在寻求Java-8特有的功能。
—
纳曼
我知道用户正在要求Java-8特定的解决方案,但总的来说,我会选择
—
Mohamed Anees
StringUtils.firstNonBlank()
问题是,Java 8 / streams并不是最佳解决方案。该代码确实闻起来像是按顺序进行重构,但是如果没有更多上下文,就很难说出来。对于初学者来说,为什么集合中可能没有如此紧密相关的三个对象呢?
—
比尔K,
@MohamedAneesA本来可以提供最佳答案(作为评论),但在这种情况下未指定StringUtils的来源。无论如何,如果您必须将它们作为一堆单独的字符串,并将其编码为vargs方法(例如“ firstNonBlank”),则是理想的选择,其中的语法将是一个数组,该数组使简单的for-each循环返回找到一个非空值琐碎且显而易见。在这种情况下,java 8流是一个令人讨厌的麻烦。他们会诱使您内联和复杂化一些本应是简单方法/循环的事情。
—
比尔K,
or
语法String s = Optional.ofNullable(str1) .or(() -> Optional.ofNullable(str2)) .or(() -> Optional.ofNullable(str3)) .orElse(str4);
看起来不如Stream.of
我所愿。