拆分Excel Cell集合为固定大小子ArrayList并提取各子数组最大值问题排查
问题根因
- 最大值变量未按分区重置:
max变量在所有分区处理前仅初始化一次,处理完前一个分区后的最大值会被带到后续分区的比对逻辑中,最终得到的是遍历到当前位置的全局最大值,而非当前子数组的最大值。 - 最大值添加逻辑位置错误:
high.add(max)被放在子数组遍历的内层循环中,每遍历一个元素就会向结果列表添加一次最大值,每个长度为N的子数组会生成N-1条结果,最终结果数量远超过分区总数。
修正后代码
int partitionSize = 50; List<List<Cell>> partitions = new ArrayList<>(); List<Cell> high = new ArrayList<>(); // 分区生成逻辑无问题,保留原有实现 for (int i = 1590; i < data.size() - 700; i += partitionSize) { partitions.add(data.subList(i, Math.min(i + partitionSize, data.size() - 700))); } for (List<Cell> list : partitions) { // 空分区防御,避免索引越界 if (list.isEmpty()) { continue; } // 每个分区处理前,重置最大值为当前分区的第一个元素 Cell max = list.get(0); for (int i = 1; i < list.size(); i++) { if (list.get(i).getNumericCellValue() > max.getNumericCellValue()) { max = list.get(i); } } // 遍历完整个分区后,仅添加一次当前分区的最大值 high.add(max); }
内容的提问来源于stack exchange,提问作者user15841461
相关产品推荐
相关产品推荐

