可选且完整的方法

问题描述 投票:0回答:1

如果我需要在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(); } ...
所以我的问题是,是否可以重构它,使代码更有吸引力?

java lambda option-type
1个回答
0
投票
我会这样写,尽管从你的问题中尚不完全清楚在找到

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(); }); }
    
© www.soinside.com 2019 - 2024. All rights reserved.