学习内容:
原代码:
BigDecimal bigDecimalMin = new BigDecimal("0.05");
BigDecimal bigDecimalMax = new BigDecimal("0.1");
for (EoEnergy eoEnergy : eoEnergyList) {
EoOutsourcedEnergyVo eoOutsourcedEnergyVo = new EoOutsourcedEnergyVo(){};
for (EoEnergy energyAvg : energyTonAvgList){
if (energyAvg.getEnergyName().equals(eoEnergy.getEnergyName())) {
eoOutsourcedEnergyVo.setEnergyId(eoEnergy.getEnergyId());
eoOutsourcedEnergyVo.setEnergyName(eoEnergy.getEnergyName());
eoOutsourcedEnergyVo.setEnergyTon(eoEnergy.getEnergyTon());
eoOutsourcedEnergyVo.setEnergyType(eoEnergy.getEnergyType());
// a.compareTo(b) == 1 ---》 a > b
if (eoEnergy.getEnergyTon().compareTo(energyAvg.getEnergyTon().multiply(bigDecimalMin)) == 1 ){
eoOutsourcedEnergyVo.setWarning(1);
} else {
eoOutsourcedEnergyVo.setWarning(0);
}
if ( eoEnergy.getEnergyTon().compareTo(energyAvg.getEnergyTon().multiply(bigDecimalMax)) == 1 ){
eoOutsourcedEnergyVo.setAlarm(1);
} else {
eoOutsourcedEnergyVo.setAlarm(0);
}
}
}
eoOutsourcedEnergyVos.add(eoOutsourcedEnergyVo);
}
优化思路:
1.将energyTonAvgList转换成Map,以减少对List的多次遍历,提高计算效率。
2.使用三目运算符对warning和alarm进行设置,不需要使用if-else语句。
注:.compareTo比较bigDecimal大小,.multiply--》 bigDecimal乘法
BigDecimal bigDecimalMin = new BigDecimal("0.05");
BigDecimal bigDecimalMax = new BigDecimal("0.1");
//将energyTonAvgList转换成Map
Map<String, EoEnergy> energyAvgMap = energyTonAvgList.stream()
.collect(Collectors.toMap(EoEnergy::getEnergyName, energy -> energy));
//遍历eoEnergyList,生成EoOutsourcedEnergyVo列表
for (EoEnergy eoEnergy : eoEnergyList) {
EoOutsourcedEnergyVo eoOutsourcedEnergyVo = new EoOutsourcedEnergyVo() {};
EoEnergy energyAvg = energyAvgMap.get(eoEnergy.getEnergyName());
if (energyAvg != null) {
eoOutsourcedEnergyVo.setEnergyId(eoEnergy.getEnergyId());
eoOutsourcedEnergyVo.setEnergyName(eoEnergy.getEnergyName());
eoOutsourcedEnergyVo.setEnergyTon(eoEnergy.getEnergyTon());
eoOutsourcedEnergyVo.setEnergyType(eoEnergy.getEnergyType());
eoOutsourcedEnergyVo.setWarning(eoEnergy.getEnergyTon().compareTo(energyAvg.getEnergyTon().multiply(bigDecimalMin)) == 1 ? 1 : 0);
eoOutsourcedEnergyVo.setAlarm(eoEnergy.getEnergyTon().compareTo(energyAvg.getEnergyTon().multiply(bigDecimalMax)) == 1 ? 1 : 0);
}
eoOutsourcedEnergyVos.add(eoOutsourcedEnergyVo);
}