如果我需要在Optional为空的情况下完成一个方法(例如一些操作,例如日志),如何正确使用Optional?否则,从Optional中获取对象并继续工作
我发现类似的问题 https://stackoverflow.com/a/55393419/1460643 但是 lambda 中使用了 return
我的代码,
...
var productOptional = productVersionMongoService.findById(crmProductId)
.map(ProductVersion::getProductId)
.flatMap(productMongoService::findById);
Product product;
if (productOptional.isEmpty()) {
log.warn(...);
return Collections.emptySet();
} else {
product = productOptional.get();
}
...
所以我的问题是,是否可以重构它,使代码更有吸引力?
Product
的情况下会返回什么。:
Collection<Product> find(String crmProductId) {
var productOptional = productVersionMongoService.findById(crmProductId)
.map(ProductVersion::getProductId)
.flatMap(productMongoService::findById);
return productOptional.map(p -> {
// ...
return Collections.singleton(p);
}).orElseGet(() -> {
log.warn();
return Collections.emptySet();
});
}