4 回答

TA貢獻1788條經(jīng)驗 獲得超4個贊
您可以使用默認值,例如空String
:
private static final String DEFAULT_FIELD = ""; Optional.ofNullable(addresses.getAddrCivicNo()).orElse(DEFAULT_FIELD)
?:
盡管如果不需要可空值的映射,則檢查 null 然后解析(可能使用運算符)會更干凈。

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 提供了多種有用的方法來安全地解開可選值。

TA貢獻1851條經(jīng)驗 獲得超3個贊
您還可以嘗試標準化這些值。我不認為Optional這里的“monad”提供任何價值。
像這樣的東西應該有效(僅適用于String值):
public static String nullToEmpty(final String str) {
return (null == str) ? "" : str;
}
// ...
nullToEmpty(addresses.getAddrCivicNo());

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());
添加回答
舉報