Kis*_*ore 0 java java-8 optional-chaining
在多个 null 条件中使用Java 8 可选功能
条件是
Optional<Payee> payee = Optional.ofNullable(paymtTrans.getPayee());
if (payee.isPresent()
&& payee.get().getPayeeAcc() != null
&& payee.get().getPayeeAcc().size() > 0
&& payee.get().getPayeeAcc().get(0).getBnk() != null
&& payee.get().getPayeeAcc().get(0).getBnk().getBnkCtryCode() != null) {
String ctryCode = payee.get().getPayeeAcc().get(0).getBnk().getBnkCtryCode();
}
Run Code Online (Sandbox Code Playgroud)
要求是使用 Java 8 功能而不检查空值!!
需要获取ctryCode吗?
只需使用Optional.map(mapperFunction). 如果mapperFunction返回 null,则.map返回一个空的Optional:
Optional<Payee> payee = Optional.ofNullable(paymentTransaction.getPayee());
Optional<String> mayBeCountryCode =
payee
.map(Payee::getPayeeAccounts)
.filter(banks -> banks.size() > 0)
.map(banks -> banks.get(0))
.map(BankHolder::getBank)
.map(Bank::getBankCountryCode);
Run Code Online (Sandbox Code Playgroud)
UPD。 您可以通过银行流来做到更优雅:
Optional<Payee> payee = Optional.ofNullable(paymentTransaction.getPayee());
Optional<String> mayBeCountryCode =
payee
.map(Payee::getPayeeAccounts)
.map(Collection::stream)
.flatMap(Stream::findFirst)
.map(BankHolder::getBank)
.map(Bank::getBankCountryCode);
Run Code Online (Sandbox Code Playgroud)
然后你可以使用mayBeCountryCode,例如,像这样:
mayBeCountryCode.ifPresent(countryCode ->
// do whatever with a non-null string
);
String countryCode = mayBeCountryCode.orElse("none");
String nullableCountryCode = mayBeCountryCode.orElse(null);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |