2016-04-26 8 views
0

私はを削除しようとしていますリストがテキストファイルに含まれていれば、リストの要素です。例えばリストから要素を削除するとforループが増加しないのですか?

:文字列"Person123が場合は、「テキストファイルにあった[文字列"Person123"は、リストから削除する必要があります以下

私の現在の試みであるしかし、私は繰り返し処理の問題を取得しています。 『』マイリスト、int値は、2つのではなく、文字列のみの要素の1つは削除される原因となっているインクリメントしていないようです、私はこの問題を解決するにはどうすればよい

現在のコードを:。?

for (Map.Entry<Person, List<String>> entry : mapOfPeopleAndDescriptions.entrySet()) { 
    List<String> textFileValues= readFromTextFile(filePath); 
    List<String> myList = entry.getValue(); 

    for (int i = 0; i < myList.size(); i++) { 

       if(textFileValues.contains(myList.get(i)){ 

        LOGGER.info("In loop- int: {}",i); 
        myList.remove(myList.get(i)); 

       } 

       LOGGER.info("Out of loop- int: {}",i); 

      } 

    } 

出力私は取得しています:

In loop- int: 0 
Out of loop- int: 0 
Out of loop- int: 1 
Out of loop- int: 0 
Out of loop- int: 1 
Out of loop- int: 0 
+0

リストを逆方向に反復します。また、 'myList.remove(i)'を使用してください。あるいは、 'Iterator'を使用してください。 –

+0

@AndyTurnerあなたはどういう意味ですか? – java123999

+0

'for(int i = myList.size(); i> = 0; i--){' –

答えて

2

forループは不要です。単にList.removeAllを使用します。

myList.removeAll(textFileValues); 

あなたは、インデックスや削除要素によって反復されている場合、あなたは逆にそれを行う必要があることを注意:

for (int i = myList.size(); i >= 0; i--) { 
    myList.remove(i); 
} 

そうでない場合は、あなたがの値を変更する必要がありますiをループ内に挿入して、次の要素をスキップしないようにします。

1

あなたはイテレータを使用し、removeメソッドを呼び出す必要があります:Iterator.removeを()。

this threadを参照してください。

関連する問題