亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 258 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號