效果:原始数据
转换后:
:我需要进行行转列的是字段是:reportdate,average
List<AllProvinceBigDataVO> allProvinceBigData = tHospBigDataMapper.getAllPrivinceBigData(hospType, titleCode, reportDates, dataSource);
// report_date avg 行转列
//指标对应的时间范围内的 itemvalue数据
Map<String, Integer> dateIndexMap = new HashMap<>();
for (int i = 0; i < reportDates.size(); i++) {
dateIndexMap.put(reportDates.get(i), i);
}
Map<String, List<ReportDateAndAvgBO>> pivotData = new HashMap<>();
for (AllProvinceBigDataVO report : allProvinceBigData) {
// 创建一个新的列 (Map),以 indexCode 为键
List<ReportDateAndAvgBO> reportData = pivotData.computeIfAbsent(report.getIndexCode() + report.getSecondTarget(), k -> {
// 初始化一个空的 list,并确保按照 reportDates 的顺序创建对应的列表
List<ReportDateAndAvgBO> newList = new ArrayList<>(reportDates.size());
for (String date : reportDates) {
newList.add(new ReportDateAndAvgBO(date, BigDecimal.ZERO));
}
return newList;
});
Integer index = dateIndexMap.get(report.getReportDate());
if (index != null) {
// 填充对应日期的数据
reportData.set(index, new ReportDateAndAvgBO(report.getReportDate(), report.getAverage()));
}
}
allProvinceBigData.forEach(vo -> {
vo.setYearAndValues(pivotData.getOrDefault(vo.getIndexCode() + vo.getSecondTarget(), new ArrayList<>()));
vo.setCanPingYear(CollUtil.getFirst(reportDates));
});