Ist es in Java legal, remove für eine Sammlung aufzurufen, wenn man die Sammlung mit einer foreach-Schleife durchläuft? Zum Beispiel:
List<String> names = ....
for (String name : names) {
// Do something
names.remove(name).
}
Ist es außerdem legal, Elemente zu entfernen, die noch nicht überarbeitet wurden? Zum Beispiel,
//Assume that the names list as duplicate entries
List<String> names = ....
for (String name : names) {
// Do something
while (names.remove(name));
}
34 Stimmen
Kein guter Plan. Nur weil die Sprache es bei einem bestimmten Lauf toleriert, ist es noch lange keine gute Idee.
0 Stimmen
Sie müssen mich in einer schlechten Stimmung erwischt haben, aber mir scheint, die Antwort auf diese Frage kommt direkt aus der foreach-Dokumentation.
2 Stimmen
stackoverflow.com/questions/223918/
1 Stimmen
Als Alternative könnten Sie in Erwägung ziehen, Ihre Sammlung nicht direkt zu ändern, sondern einen Filter-Kombinator wie Guavas Iterables#filter zu verwenden: code.google.com/p/guava-libraries/wiki/FunctionalExplained Achten Sie auf sein träges Verhalten!
0 Stimmen
Wollten Sie wirklich fragen, ob Sie
Collection
speziell, anstattList
die Sie in Ihrem Code verwenden? Wenn Sie beabsichtigen, nach folgenden Punkten zu fragenList
und nichtCollection
dann bearbeiten Sie diese Frage bitte entsprechend - dann wäre diese Frage kein Duplikat! (Ein großer Unterschied vonList
gegenCollection
ist dasList
enthältget
in seiner Schnittstelle, währendCollection
nicht).0 Stimmen
Sie können die removeIf-Methode verwenden. Beispiel: sockets.removeIf(Socket::isClosed);