Element entfernen aus
Ich versuche, entfernen Sie alle Zeichenfolgen, die sind sogar Länge in einem set. Hier ist mein code bisher, aber ich habe Probleme damit, den index aus dem iterator in der enhanced-for-loop.
public static void removeEvenLength(Set<String> list) {
for (String s : list) {
if (s.length() % 2 == 0) {
list.remove(s);
}
}
}
getting the index
: es gibt keine, als eine Reihe nicht sortiert ist.als seitliche Anmerkung, Ihr
Set
benannt ist list
verwirrend ist, gegeben, dass List
ist der name eines anderen Collection
, aber eine bestellt (die Indizes.)InformationsquelleAutor f3d0r | 2015-01-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen
Set
hat kein Konzept für einen index von einem element. Die Elemente haben keine Reihenfolge in der Liste. Darüber hinaus sollten Sie eineIterator
bei der Iteration zu vermeiden,ConcurrentModificationException
beim entfernen eines Elements aus einer Sammlung während Durchlaufen:Beachten Sie den Aufruf
Iterator.remove()
stattSet.remove()
.for
Schleife anstelle derwhile
loop hier?Nicht wirklich, ich habe gerade verwendet eine
for
seit der OP ist schon über eins. Einwhile
Schleife arbeiten würde, aber Sie würde den Rahmen derIterator
außerhalb derfor
Schleife.InformationsquelleAutor manouti
Nur dachte, ich würde post ein Java-8-Lösung, die helfen können jemand in die Zukunft. Java 8 Streams bietet eine Reihe von netten Methoden wie
filter
undcollect
. Diefilter
Methode einfach filtert die Elemente aus dem stream, die geführt werden sollten, auf zum nächsten Schritt. Diecollect
Methode verbindet Elemente zu einemCollection
von einer Art oder einerMap
.Diese eigentlich nicht ändern Sie die ursprüngliche Sammlung, sondern schafft eine neue
Set
mit derString
Objekte ungerade Länge.Mehr Lesen auf Java 8 Streams, Kasse dieses hervorragende tutorial von Oracle oder die große JavaDocs.
@OneToMany
Beziehung, löschen einer Kindes; Notwendigkeit der Schaffung eines neuenSet
ist und auf der Einen Seite.InformationsquelleAutor wassgren
Müssen Sie nicht den index. Aber Sie brauchen die explizite
Iterator
. Der iterator hat dieremove()
Methode, keine Parameter, entfernt das aktuelle Element aus der collection.InformationsquelleAutor rgettman
Java 8 eingeführt hat Sammlung.removeIf(), das können Sie tun:
->
, nicht=>
. Und, ist es nur ein syntax-Zucker "Durchlaufen und entfernen Sie mit iterator", nach der JavaDoc.InformationsquelleAutor Leonardo Lima