2016-04-26 6 views
0

Ich versuche entfernen Elemente einer Liste, wenn sie in einer Textdatei enthalten sind.Das Entfernen von Elementen aus einer Liste bewirkt, dass die for-Schleife nicht erhöht wird?

Zum Beispiel: Wenn der String "Person123 ". In der Textdatei ist dann der String "Person123" sollte aus der Liste entfernt werden

Unten ist mein aktueller Versuch aber ich ein Problem bin immer mit dem durchlaufen.‚MyList‘ , der int Wert scheint nicht erhöht, die nur eine der Stringelemente verursacht entfernt werden, anstatt zwei

Wie kann ich dieses Problem beheben

Aktuellen Code:.?

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); 

      } 

    } 

Output Ich erhalte:

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

Iterieren Sie die Liste rückwärts. Verwenden Sie auch 'myList.remove (i)'. Oder benutze einen 'Iterator'. –

+0

@AndyTurner was meinst du? – java123999

+0

'für (int i = myList.size(); i> = 0; i--) {' –

Antwort

2

Die Schleife for ist nicht erforderlich. Verwenden Sie einfach List.removeAll:

myList.removeAll(textFileValues); 

Beachten Sie, wenn Sie mit dem Index iterieren und Elemente zu entfernen, sollten Sie es in umgekehrter Richtung tun:

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

Andernfalls müssen Sie den Wert ändern i in der Schleife, um zu vermeiden, dass das nächste Element übersprungen wird.

1

Sie sollten einen Iterator verwenden und dann das Entfernen-Methode aufrufen: Iterator.remove().

Siehe this thread.