Java 代码优化建议:提高可读性和效率
以下 Java 代码提供了一些优化建议,旨在提高代码的可读性和效率:
public YltStatusVo queryStatusQuo(String type, Date startDate, Date endDate) {
YltStatusVo yltStatusVo = new YltStatusVo();
// 结束时间为空默认为当前时间,并格式化为 yyyyMMdd
String endTime = DateUtil.format(ObjectUtil.isEmpty(endDate) ? new Date() : endDate, DatePattern.PURE_DATE_PATTERN);
String startTime = DateUtil.format(ObjectUtil.isEmpty(startDate) ? DateUtil.lastMonth() : startDate, DatePattern.PURE_DATE_PATTERN);
YltStatusVo yltStatusVoCache = redisTemplate.opsForValue().get(type + StringPool.UNDERSCORE + startTime + StringPool.UNDERSCORE + endTime);
if (ObjectUtil.isNotEmpty(yltStatusVoCache)) {
return yltStatusVoCache;
}
List<YltStatusBo> yltStatusBos = statusQuoMapper.queryStatusNum(type, startTime, endTime);
Map<String, Integer> statusNumMap = CollStreamUtil.toMap(yltStatusBos, YltStatusBo::getType, YltStatusBo::getNum);
// 修复总数
yltStatusVo.setRepairTotal(statusNumMap.getOrDefault('修复', 0));
// 合格总数
yltStatusVo.setQualifiedTotal(statusNumMap.getOrDefault('合格', 0));
// 不合格总数
yltStatusVo.setUnqualifiedTotal(statusNumMap.getOrDefault('不合格', 0));
// 查询有效及全部案件数据
YltActiveAndAllBo yltActiveAndAllBo = statusQuoMapper.queryActiveAndAll(type, startTime, endTime);
// 有效案件
yltStatusVo.setEffectiveTotal(yltActiveAndAllBo.getActiveNum());
// 全部案件
yltStatusVo.setCaseTotal(yltActiveAndAllBo.getAllNum());
// 计算案件修复率
if (yltActiveAndAllBo.getActiveNum() != 0) {
BigDecimal result = NumberUtil.div(yltStatusVo.getRepairTotal(), yltActiveAndAllBo.getActiveNum());
yltStatusVo.setRepairRate(NumberUtil.formatPercent(Convert.toDouble(result), 2));
} else {
yltStatusVo.setRepairRate('0%');
}
redisTemplate.opsForValue().set(type + StringPool.UNDERSCORE + startTime + StringPool.UNDERSCORE + endTime, yltStatusVo, 300, TimeUnit.SECONDS);
return yltStatusVo;
}
优化建议:
-
提取常量:可以将
DatePattern.PURE_DATE_PATTERN和StringPool.UNDERSCORE提取成静态变量,提高代码的可读性和维护性。 -
方法重构:对于
endDate和startDate的处理逻辑,可以提取成一个独立的方法,例如getFormattedDate(Date date),提高代码的复用性。 -
工具类方法:可以将计算修复率的逻辑提取成一个工具类方法,例如
calculateRepairRate(int repairTotal, int activeNum),提高代码的可读性和可维护性。 -
使用 Optional 类型:使用
Optional类型可以代替ObjectUtil.isEmpty和ObjectUtil.isNotEmpty,提高代码的可读性和安全性。例如:
String endTime = DateUtil.format(Optional.ofNullable(endDate).orElse(new Date()), DatePattern.PURE_DATE_PATTERN);
- 使用 @Cacheable 注解:使用
@Cacheable注解可以方便地使用缓存机制,提高代码的性能。例如:
@Cacheable(value = 'yltStatusVo', key = '#type + '_' + #startTime + '_' + #endTime')
public YltStatusVo queryStatusQuo(String type, Date startDate, Date endDate) {
// ... 代码逻辑 ...
}
通过以上优化,可以有效提高代码的可读性、可维护性和执行效率。
原文地址: https://www.cveoy.top/t/topic/ohcm 著作权归作者所有。请勿转载和采集!