使用字符串列表,我试图匹配Excel工作表中的字符串,并在内部列表中添加单元格元素。使用循环在外部列表中添加内部列表。请参考以下代码
public static List<ArrayList<String>> getKeywords(List<String> testCaseIdList, String fileName, String sheetName){
try {
ArrayList<String> listTestSteps = new ArrayList<String>();
List<ArrayList<String>> listTestCases = new ArrayList<ArrayList<String>>(0);
Sheet sheetKW = ReadExcelFile.readExcel(ST_KEYWORDS);
String columnValue = null;
int matchFlag, addListFlag = 0;
for(String testCaseId : testCaseIdList) {
Iterator<Row> rowIterator = sheetKW.rowIterator();
listTestSteps.clear();
while(rowIterator.hasNext()) {
Row rowNext = (Row) rowIterator.next();
Iterator<Cell> cellIterator = rowNext.cellIterator();
matchFlag = 0;
addListFlag = 0;
//listTestSteps.clear();
while(cellIterator.hasNext()) {
Cell nextCell = cellIterator.next();
columnValue = nextCell.getStringCellValue();
//System.out.println("Column value " +columnValue);
if((columnValue.equalsIgnoreCase(testCaseId)) && (columnValue != "" )) {
matchFlag = 1;
}
if(matchFlag == 1 && columnValue != "") {
listTestSteps.add(columnValue);
addListFlag = 1;
System.out.println("Add Value : "+columnValue);
}
}
if((listTestSteps.isEmpty() == false) && (addListFlag == 1)) {
System.out.println("Adding to the Main list");
listTestCases.add(listTestSteps);
//listTestCases.forEach(System.out::println);
}
}
}
//listTestSteps.forEach(System.out::println);
// Return ArrayList of ArrayLists
return listTestCases;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
我的输出为
[TC_0003, login, createUser, deleteUser]
[TC_0003, login, createUser, deleteUser]
首先,添加的列表listTestSteps
将被最后一个迭代列表替换。
预期产量是
[[TC_0002, login, createUser, deleteUser, newUser], [TC_0003, login, createUser, deleteUser]]
肯定有问题。任何帮助将不胜感激。
答案 0 :(得分:2)
使用
listTestSteps.clear();
循环中的指令允许您始终使用相同的列表,因此在每次迭代中,您只需清空并重新填充相同的列表并将其添加到外部列表中。因此,外部列表最后将包含始终位于同一列表中的x个条目,这些条目将填充您在上次迭代中放置的数据。
所以你必须要做
ArrayList<String> listTestSteps = new ArrayList<String>();
而不是清除列表
答案 1 :(得分:1)
问题是您将listTestSteps
的引用添加到listTestCases
,然后在下一个循环中清除listTestSteps
,但清除的列表仍在listTestCases
中引用。因此建议使用Add an object to an ArrayList
and modify it later的答案来确保两个列表都得到正确解析。