You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java从列表获取前元素:CSV空行填充逻辑异常排查

解决CSV空行用前一行数据填充的问题

原代码的核心问题

  1. 每次循环都重置prev = null,无法持续保留上一行的有效数据
  2. 使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 08:33:34