Java中通过多重循环生成包含级联值的CSV报告该如何实现?
级联报告导出代码问题说明与优化方案
现有代码语法问题
你当前的代码存在两处明显的语法错误,修正后可以正常运行:
- 内层循环变量定义错误:第三层循环重复定义了
j变量,且未初始化k变量,编译不通过,需要修改为for (int k = 0; k < kSize; k++) write方法参数缺失:当前write方法只定义了3个参数,调用时传入了4个参数,且方法内部直接使用未声明的k变量,需要补充k参数:private static void write(CountryDTO country, Row row, int j, int k)
实现思路合理性说明
你原本的三层遍历级联结构逐行生成表格的思路是完全合理的,只要修正上述语法错误就可以正常运行,生成你需要的级联值报告,可以临时使用。
优化方案(更推荐长期维护使用)
为了避免索引变量写错、索引越界等问题,更建议使用增强for循环遍历对象,不需要维护i、j、k三个索引变量,代码可读性和可维护性更高,示例实现如下:
public MultipartFile exportData() throws IOException { // code omitted for brevity int rowCount = 0; final List<CountryDTO> countryList = countryService.findAll(); // 直接遍历对象,无需索引变量 for (CountryDTO country : countryList) { for (CityDTO city : country.getCityList()) { for (TownDTO town : city.getTownList()) { Row row = sheet.createRow(rowCount++); write(country.getName(), city.getName(), town.getName(), row); } } } // code omitted for brevity } // write方法直接接收取值结果,无需内部再通过索引取集合元素 private static void write(String countryName, String cityName, String townName, Row row) { Cell cell = row.createCell(0); cell.setCellValue(countryName); cell = row.createCell(1); cell.setCellValue(cityName); cell = row.createCell(2); cell.setCellValue(townName); }
这个写法逻辑和你原本的思路完全一致,只是写法更简洁,出错概率更低。
内容的提问来源于stack exchange,提问作者user16409822
相关产品推荐
相关产品推荐

