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

Java 8 中的多个空值检查

Java 8 中的多个空值检查

梦里花落0921 2022-06-30 18:35:54
我有下面的代码,对于多个空检查来说有点难看。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.ofNullablewith OR,但在 Java8 中还有其他方法吗?
查看完整描述

4 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

你可以这样做:

String s = Stream.of(str1, str2, str3)
    .filter(Objects::nonNull)
    .findFirst()
    .orElse(str4);


查看完整回答
反对 回复 2022-06-30
?
跃然一笑

TA贡献1826条经验 获得超6个赞

三元条件运算符呢?


String s = 

    str1 != null ? str1 : 

    str2 != null ? str2 : 

    str3 != null ? str3 : str4

;


查看完整回答
反对 回复 2022-06-30
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

您还可以使用循环:


String[] strings = {str1, str2, str3, str4};

for(String str : strings) {

    s = str;

    if(s != null) break;

}


查看完整回答
反对 回复 2022-06-30
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

当前的答案很好,但你真的应该把它放在一个实用方法中:


public static Optional<String> firstNonNull(String... strings) {

    return Arrays.stream(strings)

            .filter(Objects::nonNull)

            .findFirst();

}

这种方法已经在我的Util课堂上使用了多年,使代码更清晰:


String s = firstNonNull(str1, str2, str3).orElse(str4);

您甚至可以使其通用:


@SafeVarargs

public static <T> Optional<T> firstNonNull(T... objects) {

    return Arrays.stream(objects)

            .filter(Objects::nonNull)

            .findFirst();

}


// Use

Student student = firstNonNull(student1, student2, student3).orElseGet(Student::new);



查看完整回答
反对 回复 2022-06-30
  • 4 回答
  • 0 关注
  • 239 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号