前言:
skline1有年份和新申请单位数,skline2有年份和有效期内单位数,我想要把1和2的年份放在一起从小到大放,没有重复的,新申请单位数和有效期内单位数和年份的排列顺序一致
实现:
// 获取原始数据
List<Map<String, Object>> skLine1 = bmzgConfidentQualifyManageService.getSkLine1();
List<Map<String, Object>> skLine2 = bmzgConfidentQualifyManageService.getSkLine2();// 转换为年份->数据的Map便于查询
Map<String, String> yearToCount1 = skLine1.stream().collect(Collectors.toMap(map -> map.get("年份").toString(),map -> map.get("新申请单位数").toString()));Map<String, String> yearToCount2 = skLine2.stream().collect(Collectors.toMap(map -> map.get("年份").toString(),map -> map.get("有效期内单位数").toString()));// 合并年份并排序
Set<String> mergedYears = Stream.concat(skLine1.stream().map(map -> map.get("年份").toString()),skLine2.stream().map(map -> map.get("年份").toString())).collect(Collectors.toCollection(TreeSet::new)); // 自动排序去重// 构建最终结果
List<String> sortedYears = new ArrayList<>(mergedYears);
List<String> newApplications = new ArrayList<>();
List<String> validUnits = new ArrayList<>();for (String year : sortedYears) {newApplications.add(yearToCount1.getOrDefault(year, "0")); // 没有数据默认为0validUnits.add(yearToCount2.getOrDefault(year, "0"));
}// 最终合并结果
Map<String, Object> result = new HashMap<>();
result.put("xData", sortedYears); // 排序后的年份列表
result.put("yData1", newApplications); // 对应年份的新申请单位数
result.put("yData2", validUnits); // 对应年份的有效期内单位数