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

Java中实现针对Excel同一testCaseValidationID多行数据批量实例化POJO的需求咨询

Java中实现针对Excel同一testCaseValidationID多行数据批量实例化POJO的需求咨询

你的问题核心在于当前方法找到第一个匹配testCaseValidationID的行后就直接return了,所以只能拿到单个POJO实例,没法处理多行匹配的情况。咱们只需要调整方法的返回类型和逻辑,就能实现批量实例化的需求,具体步骤和修改后的代码如下:

关键改动点

  • 修改返回类型:把方法返回值从单个TestCaseValidation改成List<TestCaseValidation>,这样可以容纳多个匹配的实例
  • 初始化结果列表:在方法开头创建一个空的列表(比如ArrayList),用来存储所有符合条件的POJO对象
  • 调整循环逻辑:找到匹配的行时,创建POJO实例并设置属性,然后添加到列表中,不要立刻返回,继续循环处理剩余的行
  • 移除提前返回的语句:去掉原代码中创建完对象后的return tcValidation;,让循环能跑完所有行

修改后的完整代码

import java.util.ArrayList;
import java.util.List;

public static List<TestCaseValidation> getTestCaseValidationDetails(String testCaseExecutionID) {
    Sheet testcaseValidationSheet = allSheetNames.get(TestCaseSheetNames.TEST_CASE_VALIDATIONS.toString());
    // 初始化存储结果的列表
    List<TestCaseValidation> tcValidationList = new ArrayList<>();
    int allValidationsCount = testcaseValidationSheet.getPhysicalNumberOfRows();

    for (int rowIndex = 1; rowIndex < allValidationsCount; rowIndex++) {
        Row testcaseRow = testcaseValidationSheet.getRow(rowIndex);
        String testCaseValidationID = testcaseRow.getCell(0).getStringCellValue();

        try {
            if (testCaseExecutionID.equalsIgnoreCase(testCaseValidationID)) {
                String testcaseName = testcaseRow.getCell(1).getStringCellValue();
                String elementPage = testcaseRow.getCell(2).getStringCellValue();
                String elementName = testcaseRow.getCell(3).getStringCellValue();
                String validationType = testcaseRow.getCell(4).getStringCellValue();
                String condition = testcaseRow.getCell(5).getStringCellValue();
                String description = testcaseRow.getCell(6).getStringCellValue();

                TestCaseValidation tcValidation = new TestCaseValidation();
                tcValidation.setTCID(testCaseValidationID);
                tcValidation.setTCName(testcaseName);
                WebORElementsDao element = new WebORElementDaoMapper().getElement(elementPage, elementName);
                tcValidation.setElementToValidate(element);
                tcValidation.setValidationType(validationType);
                tcValidation.setCondition_or_text_value(condition);
                tcValidation.setDescription(description);

                // 将当前行的实例添加到列表,而非直接返回
                tcValidationList.add(tcValidation);
            }
        } catch (Exception e) {
            // 可根据需求添加日志记录,原注释可保留或调整
            // e.printStackTrace();
        }
    }
    // 返回所有匹配的实例列表
    return tcValidationList;
}

使用示例

调用这个方法的地方需要调整为接收列表,比如:

List<TestCaseValidation> validations = getTestCaseValidationDetails("TC001");
for (TestCaseValidation validation : validations) {
    // 在这里处理每个TestCaseValidation实例的业务逻辑
}

这样修改后,当Excel里有3行testCaseValidationID=TC001的数据时,方法会创建3个独立的TestCaseValidation实例并全部返回,完美满足你的需求~

备注:内容来源于stack exchange,提问作者wheelerlc64

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 09:27:43