第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如何獲取可選值,同時避免 NoSuchElementException 錯誤?

如何獲取可選值,同時避免 NoSuchElementException 錯誤?

藍山帝景 2023-08-04 10:10:26
我有以下代碼private static String getAddressLine(Addresses addresses) {  if (addresses.getAddrCivicNo() == null || addresses.getStName() == null)     {      return null;    }    StringBuilder addressLine = new StringBuilder("");    addressLine.append(Optional.ofNullable(addresses.getAddrCivicNo()).get());    addressLine.append(" ");    addressLine.append(Optional.ofNullable(addresses.getAddrPreStrTypeDesignator()).get());    addressLine.append(" ");    addressLine.append(Optional.ofNullable(addresses.getStName()).get());    addressLine.append(", ");    addressLine.append(Optional.ofNullable(addresses.getAddrPostStrTypeDesignator()).get());    addressLine.append(" ");    addressLine.append(Optional.ofNullable(addresses.getAddrPostStrDirectionDesignator()).get());    addressLine.append(" ");    addressLine.append(Optional.ofNullable(addresses.getAddrPreStrDirectionDesignator()).get());    addressLine.append(" ");    addressLine.append(Optional.of(addresses.getAddrUnitDesignatorTypeCd()).get());    addressLine.append(" ");    addressLine.append(Optional.of(addresses.getAddrUnitNo()).get());    return addressLine.toString();}如果我的任何字段是null,我會NoSuchElementException因調(diào)用而收到錯誤get()。如果我刪除get()我要附加的調(diào)用Optional.empty,但如果字段是 ,我不想附加任何內(nèi)容null。有什么建議么?
查看完整描述

4 回答

?
尚方寶劍之說

TA貢獻1788條經(jīng)驗 獲得超4個贊

您可以使用默認值,例如空String

private static final String DEFAULT_FIELD = "";

Optional.ofNullable(addresses.getAddrCivicNo()).orElse(DEFAULT_FIELD)

?:盡管如果不需要可空值的映射,則檢查 null 然后解析(可能使用運算符)會更干凈。


查看完整回答
反對 回復 2023-08-04
?
瀟湘沐

TA貢獻1816條經(jīng)驗 獲得超6個贊

如果您使用的是 JDK9+,我建議您研究一下Objects.requireNonNullElse,即:

public?static?<T>?T?requireNonNullElse(T?obj,T?defaultObj)

這比做Optional.ofNullable(addresses.getAddrCivicNo()).orElse(...)etc 更干凈、更具可讀性。使用前者也更加性能友好,因為您不需要創(chuàng)建可選實例。

此外,一些想法可能會簡化您的邏輯。

您可以使用Stream.of然后過濾掉空值,然后使用指定的分隔符連接。

Stream.of(addresses.getAddrCivicNo(),?addresses.getAddrPreStrTypeDesignator(),?...)
??????.filter(Objects::nonNull)
??????.collect(joining("?"));

我建議您考慮的另一個建議是可能讓函數(shù)getAddressLine返回 aOptional<String>而不是String。這本質(zhì)上使該 API 的客戶端不必處理nullity,而是為他們提供了可操作的可選 API,該 API 提供了多種有用的方法來安全地解開可選值。


查看完整回答
反對 回復 2023-08-04
?
皈依舞

TA貢獻1851條經(jīng)驗 獲得超3個贊

您還可以嘗試標準化這些值。我不認為Optional這里的“monad”提供任何價值。


像這樣的東西應該有效(僅適用于String值):


public static String nullToEmpty(final String str) {

  return (null == str) ? "" : str;

}


// ...


nullToEmpty(addresses.getAddrCivicNo());


查看完整回答
反對 回復 2023-08-04
?
慕村225694

TA貢獻1880條經(jīng)驗 獲得超4個贊

使用Objects.toString方法,該方法采用“如果第一個參數(shù)為空則使用”參數(shù):

addressLine.append(Objects.toString(addresses.getAddrCivicNo(), ""));

addressLine.append(" ");

addressLine.append(Objects.toString(addresses.getAddrPreStrTypeDesignator(), ""));

addressLine.append(" ");

addressLine.append(Objects.toString(addresses.getStName(), ""));

addressLine.append(", ");

addressLine.append(Objects.toString(addresses.getAddrPostStrTypeDesignator(), ""));

addressLine.append(" ");

addressLine.append(Objects.toString(addresses.getAddrPostStrDirectionDesignator(), ""));

addressLine.append(" ");

addressLine.append(Objects.toString(addresses.getAddrPreStrDirectionDesignator(), ""));

addressLine.append(" ");

addressLine.append(addresses.getAddrUnitDesignatorTypeCd());

addressLine.append(" ");

addressLine.append(addresses.getAddrUnitNo());


查看完整回答
反對 回復 2023-08-04
  • 4 回答
  • 0 關注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號