Java 代码优化:运费计算逻辑优化
优化代码如下:
List<FreightPriceDto> freightPriceDtoList = new LinkedList<>();
Map<Long, Integer> productMap = new LinkedHashMap<>();
List<Long> notTempIdProduct = new LinkedList<>();
//查询商品对应的模板id
for (Long productId : productIds) {
ProductVo productInfo = cache.get(PRODUCT_DETAIL_CACHE + productId);
if (productInfo == null || productInfo.getProductInfo() == null || productInfo.getProductInfo().getTempId() == null) {
notTempIdProduct.add(productId);
} else {
productMap.put(productId, productInfo.getProductInfo().getTempId());
}
}
//缓存没有的远程抵用查询商品详情信息
if (CollectionUtil.isNotEmpty(notTempIdProduct)) {
Map<Long, ProductVo> productDetail = iProductApi.muchProductDetail(notTempIdProduct, 1);
if (productDetail != null) {
for (Long productId : productDetail.keySet()) {
productMap.put(productId, productDetail.get(productId).getProductInfo().getTempId());
}
}
}
for (Long productId : productIds) {
Integer tempId = productMap.get(productId);
FreightPriceDto freightPriceDto = new FreightPriceDto();
freightPriceDto.setProductId(productId);
freightPriceDto.setTemplatesRegions(templateRegionListLocalCache.get(TEMPLATE_REGION + tempId, ()->{
LambdaQueryWrapper<YxShippingTemplatesRegion> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(YxShippingTemplatesRegion::getTempId, tempId);
return yxShippingTemplatesRegionMapper.selectList(wrapper);
}));
freightPriceDto.setRegionInfo(productUnDelivery(tempId));
freightPriceDtoList.add(freightPriceDto);
}
return freightPriceDtoList;
优化说明:
-
将if-else语句改为if条件不满足时执行的语句,减少嵌套层数,使代码更加清晰。
-
使用lambda表达式和方法引用简化代码。
-
使用Java8新特性中的Map.computeIfAbsent()方法,减少代码量。
-
将查询数据库的操作放入缓存中,减少数据库访问次数。
优化后的代码逻辑更加清晰简洁,并且通过使用缓存机制提高了代码的效率。
原文地址: https://www.cveoy.top/t/topic/ovqa 著作权归作者所有。请勿转载和采集!