2016-12-08 9 views
-2

文字列のリストを使用して、Excelシート内の文字列を一致させ、内側のリストにセル要素を追加しようとしています。ループを使用して外側のリストに内側のリストを追加する。Javaを使用してリストにリストを追加できません

[TC_0003, login, createUser, deleteUser] 
[TC_0003, login, createUser, deleteUser] 

まず追加リストlistTestStepsとして

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_0002, login, createUser, deleteUser, newUser], [TC_0003, login, createUser, deleteUser]] 確かに間違っています。どんな助けもありがとう。ループあなたが常に同じリストを使用することができますので、全ての反復であなただけの空と同じリストを補充し、外側のリストに追加で

listTestSteps.clear(); 

命令を使用して

+0

このステップは正確に失敗しますか? – XtremeBaumer

+0

それは失敗していません。リストの 'listTestCases'は最新の' listTestSteps'に置き換えられています。代用する代わりに追加されない。 – avirup

+0

あなたが読んだり印刷した値は正しい値ですか? – XtremeBaumer

答えて

2

。このため、外側のリストの最後には常に同じリストを指すx個のエントリがあり、最後の繰り返しでそこに置いたデータで埋められます。

だからあなただけのリスト問題は、あなたがlistTestStepsをクリアし、次のループで、その後listTestCaseslistTestStepsの参照を追加している

+0

ラブリー。私は期待される結果を得ています。しかし、ちょうど説明のために - リストをクリアするのではなく、私はいつも新しいArraylistを始めますか? – avirup

+1

はい。それ以外の場合は、反復処理によって常に反復を追加し、同じオブジェクトをクリアし、毎回クリアして新しいデータで再充填します – Massimo

1

をクリアするのではなく、

ArrayList<String> listTestSteps = new ArrayList<String>(); 

をしなければならないが、クリアされたリストはまだlistTestCasesで参照されています。両方のリストが適切に解決されるように、Add an object to an ArrayList and modify it laterへの答えを使用することを推奨します。

関連する問題