代码优化 EquDeviceTslProperty tslProperty = new EquDeviceTslProperty(); tslProperty.setDeviceCode(deviceDataSearch.getDeviceCode()); tslProperty.setPropertyId(deviceDataSearch.getPropertyId()); List<EquDeviceTslProperty> equDeviceTslProperties = equDeviceTslPropertyService.selectEquDeviceTslPropertyList(tslProperty); List<DeviceDataShow> deviceDataShows = new ArrayList<>(); LocalDate startTime = deviceDataSearch.getStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); LocalDate endTime = deviceDataSearch.getEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); int addDays = 0; while (true) { startTime = startTime.plusDays(addDays); LocalDate finalStartTime = startTime; equDeviceTslProperties.forEach(ar->{ Map<String, String> historyData = this.getHistoryData(deviceDataSearch.getDeviceCode(), ar.getPropertyId(), finalStartTime.toString()); historyData.forEach((k,v)->{ DeviceDataShow deviceDataShow = new DeviceDataShow(); BeanUtils.copyBeanProp(deviceDataShow,ar); deviceDataShow.setRealTimeData(v); deviceDataShow.setTime(finalStartTime.toString()+" "+k); deviceDataShows.add(deviceDataShow); }); }); if (startTime.equals(endTime)) { break; } } return deviceDataShows.stream().sorted(Comparator.comparing(DeviceDataShow::getTime)).collect(Collectors.toList());
时间: 2024-02-27 19:57:45 浏览: 26
可以优化的地方有:
1. 在 while 循环中每次都需要调用 `equDeviceTslProperties.forEach()` 方法遍历属性列表,可以将该方法提取出来,放在 while 循环外部,避免重复调用。
2. 每次循环都需要将 `LocalDate` 类型转换为 `String` 类型,可以在 while 循环外部将 `startTime` 和 `endTime` 都转换为 `String` 类型,避免重复转换。
3. 使用 `BeanUtils.copyBeanProp()` 方法将 `EquDeviceTslProperty` 的属性值复制到 `DeviceDataShow` 中,可以考虑在 `DeviceDataShow` 中添加一个构造函数,直接传入 `EquDeviceTslProperty` 对象,避免使用反射操作。
优化后的代码如下:
```
EquDeviceTslProperty tslProperty = new EquDeviceTslProperty();
tslProperty.setDeviceCode(deviceDataSearch.getDeviceCode());
tslProperty.setPropertyId(deviceDataSearch.getPropertyId());
List<EquDeviceTslProperty> equDeviceTslProperties = equDeviceTslPropertyService.selectEquDeviceTslPropertyList(tslProperty);
List<DeviceDataShow> deviceDataShows = new ArrayList<>();
LocalDate startTime = deviceDataSearch.getStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate endTime = deviceDataSearch.getEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
String startStr = startTime.toString();
String endStr = endTime.toString();
equDeviceTslProperties.forEach(ar -> {
for (LocalDate date = startTime; !date.isAfter(endTime); date = date.plusDays(1)) {
Map<String, String> historyData = this.getHistoryData(deviceDataSearch.getDeviceCode(), ar.getPropertyId(), date.toString());
historyData.forEach((k,v) -> {
DeviceDataShow deviceDataShow = new DeviceDataShow(ar, v, date.toString()+" "+k);
deviceDataShows.add(deviceDataShow);
});
}
});
return deviceDataShows.stream().sorted(Comparator.comparing(DeviceDataShow::getTime)).collect(Collectors.toList());
```