我替换了以下代码:
if (status.getPlace() == null) {
row.set("CountryCode", "Unknown");
row.set("Country", "Unknown");
} else {
if (status.getPlace().getCountryCode() == null) {
row.set("CountryCode", "Unknown");
} else {
row.set("CountryCode", status.getPlace().getCountryCode());
}
if (status.getPlace().getCountry() == null) {
row.set("Country", "Unknown");
} else {
row.set("Country", status.getPlace().getCountry());
}
}
与此:
String countryCode = Optional.ofNullable(status.getPlace())
.filter(p -> p.getCountryCode() != null)
.map(Place::getCountryCode)
.orElse("Unknown");
row.set("CountryCode", countryCode);
String country = Optional.ofNullable(status.getPlace())
.filter(p -> p.getCountry() != null)
.map(Place::getCountry)
.orElse("Unknown");
row.set("Country", country);
它按预期工作,但我认为我可以做得更好。我仍在其中进行“空”检查。
.filter(p -> p.getCountryCode() != null)
有办法避免上述空检查吗?
答案 0 :(得分:17)
您不需要空值检查-.filter(p -> p.getCountry() != null)
。删除它,您的代码应该可以正常工作。
Optional.map()
本身返回一个Optional
实例。因此,无需应用空检查。
答案 1 :(得分:9)
您根本不需要执行$data = Item::with(['categories.categoryProperties','categories.categoryProperties.itemProperties'])->get();
操作。如果对filter
或Place::getCountryCode
的调用返回了Place::getCountry
,则返回一个空的可选值,这意味着将调用null
方法来检索备用值。