Java从列表获取前元素:CSV空行填充逻辑异常排查
解决CSV空行用前一行数据填充的问题
原代码的核心问题
- 每次循环都重置
prev = null,无法持续保留上一行的有效数据 - 使用
ListIterator时,previous()和next()的指针来回移动逻辑冗余且容易出错,没必要用这种方式获取上一行数据
解决方案一:普通for循环(最直观推荐)
直接用增强for循环遍历列表,用一个变量持续跟踪上一行的有效数据:
Data prevValidData = null; for (Data current : dataList) { // 判断当前行是否为空 if (current.getNumber() == null || current.getNumber().trim().isEmpty()) { // 第一行为空的情况可根据需求调整,这里跳过不处理 if (prevValidData != null) { current.setPartType(prevValidData.getPartType()); current.setNumber(prevValidData.getNumber()); } } else { // 当前行有效,更新跟踪变量 prevValidData = current; } }
解决方案二:修正ListIterator用法(若必须用迭代器)
不需要调用previous(),改用外部变量跟踪上一行有效数据,迭代器仅负责向后遍历:
ListIterator<Data> li = dataList.listIterator(); Data prevValidData = null; while (li.hasNext()) { Data current = li.next(); if (current.getNumber() == null || current.getNumber().trim().isEmpty()) { if (prevValidData != null) { current.setPartType(prevValidData.getPartType()); current.setNumber(prevValidData.getNumber()); } } else { prevValidData = current; } }
关键说明
- 核心逻辑是用独立变量持续保存上一行的有效数据,而不是依赖迭代器的指针来回移动获取前元素
- 第一行如果为空,可根据业务需求处理(比如保留null、抛异常或用默认值)
内容的提问来源于stack exchange,提问作者nbe
相关产品推荐
相关产品推荐

