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
相关产品推荐
相关产品推荐

