foreach Schleife

Status
Nicht offen für weitere Antworten.

GilbertGrape

Bekanntes Mitglied
Hallo,

Ich versuche mal, mein Problem ganz einfach zu erläutern.
Ich möchte aus einer List gleiche Einträge raussuchen.
Das heißt, ich nehme den ersten Eintrag und suche alle gleichen Einträge.
Da ich die ja nur einmal haben möchte, lösche ich sie dann aus der Liste.

Ich dachte, dass die foreach-Schleife (heißt die auch so in Java?) dann so "schlau" ist und einfach zum nächsten noch vorhandenen Eintrag in der Liste geht, aber so gehts anscheinend nicht.

Hier mein Code:

Code:
public static void main(String... args) {
			   List<String> list = new ArrayList<String>();
			   List<String> remove = new ArrayList<String>();
			   list.add("Hallo1");
			   list.add("Hallo1");
			   list.add("Hallo2");
			   list.add("Hallo3");
			   list.add("Hallo4");
			   list.add("Hallo5");
			   
			   for (String erster : list){
				   remove.clear();
				   for (String zweiter : list){
					   if (erster.equals(zweiter)){
						   remove.add(zweiter);
					   }
				   }
				   list.removeAll(remove);
			   }
		   }

Exception:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)

Die Exception kommt, wenn er das 2. Mal zum ersten for kommt.
 
S

SlaterB

Gast
streiche Zeile 13 und vertausche Zeile 19 und 20

-------

während du über eine Liste iterierst, darst du nichts daraus löschen

-----

kürzer wäre
list = new ArrayList<String>(new HashSet(list));
 

GilbertGrape

Bekanntes Mitglied
Danke, aber so einfach ist es leider nicht.
Die Einträge sind nicht wirklich gleich, haben nur einen gleichen Schlüssel. Ich will die Einträge quasi gruppieren.
Ich schreibe "Hallo1" und "Hallo1" (sagen wir mal, das wären Schlüssel :) ) raus. Beim nächsten Durchlauf ist er dann beim zweiten "Hallo1" und ich hab die gleiche Liste nochmal. Deshalb wollte ich die Einträge eben löschen, nachdem ich alle Einträge zu einem Schlüssel gefunden hab.

Sorry, dass ich das Beispiel so blöd gewählt hab.
 
S

SlaterB

Gast
falls da noch eine Frage drinsteht, so musst du sie für mich neuformulieren ;)
zumindest deinen Fehler habe ich ja erklärt
 

GilbertGrape

Bekanntes Mitglied
Also gut:
Ich möchte Elemente einer Liste nach einem bestimmten Merkmal gruppieren. Wie mach ich das am Besten? :)
Wenn ich zum Beispiel Objekte haben, die jeweils ein Attribut Datum haben. Ich möchte jetzt, dass in einer Liste alle Elemente mit einem Datum stehen und das natürlich für alle vorkommenden Daten.
 

GilbertGrape

Bekanntes Mitglied
Ich könnte natürlich in jedem Durchlauf abfragen, ob ich dieses Datum schonmal hatte, aber ich dachte, dass das nicht so schön und eben auch mehr Aufwand ist (für den Rechner, nicht für mich ;) )
 
S

SlaterB

Gast
Liste anlegen und einfügen,
das hast du doch anscheinend schon?

nur das Entfernen darfst du während des Durchlaufs nicht machen,
muss das denn dabei passieren? damit die Listen nicht mehrfach erzeugt werden?


mal was anderes:
verwende eine Liste X besonderer Elemente sowie eine Map Element -> Liste

dann durchläufst du die Ursprungsliste nur genau einmal,
für jedes Element Y durchläufst du die Liste X, wenn nicht gefunden, dann füge Y in X ein sowie im die Map einen neuen Eintrag Y -> neue Liste mit Y drin

falls doch gefunden dann hole dir aus der Map die passende bereits vorhandene Liste und füge dort auch Y ein,

so hast du am Ende in X ein paar Elemente, die Gruppenköpfe,
und in der Map jeweils die Liste der zugehörigen Elemente


falls alle Elemente ordentlich HashCode implementieren passend zur Gruppenzugehörigkeit, dann reicht auch nur die Map
 
M

Michael...

Gast
Zunächst: Weg mit der for each Schleife (ich kann sie mit meiner version 1.4.2 auch nicht nutzen;-))
Und her mit einer normalen for Schleife, die allerdings vom Listenende anfängt zu iterieren und dann wenn der aktuelle index bereits in der Liste enthalten ist diesen löschen.
 

GilbertGrape

Bekanntes Mitglied
Danke SlaterB! Ich lass mir das mal durch den Kopf gehen und meld mich dann vielleicht morgen nochmal!

Michael, ich glaube, du hast nicht ganz verstanden was ich meinte. Und sind alle Sachen schlecht, die seit Java 1.4.2 dazu gekommen sind?
 
S

SlaterB

Gast
zumindest würde die alte Variante die Exception verhindern, das ist doch schonmal was,

aber auch damals war es nicht die feine Art, eine Liste zu ändern, die gerade durchlaufen wird
 
M

Michael...

Gast
GilbertGrape hat gesagt.:
ich glaube, du hast nicht ganz verstanden was ich meinte.
Ich hab verstanden Du willst doppelte/ähnliche Einträge aus einer Liste löschen. Deswegen mein Hinweis, wenn man beim durchlaufen einer Liste Einträge löschen will, sollte man die Liste von hinten nach vorne durchlaufen, dann hat man weniger Problemen mit dem Index.
GilbertGrape hat gesagt.:
Und sind alle Sachen schlecht, die seit Java 1.4.2 dazu gekommen sind?
Ist ja nur der Neid, dass mir so manche Funktion aus höheren Versionen nicht zur Verfügung steht. ;-(
 

GilbertGrape

Bekanntes Mitglied
Michael... hat gesagt.:
Ich hab verstanden Du willst doppelte/ähnliche Einträge aus einer Liste löschen. Deswegen mein Hinweis, wenn man beim durchlaufen einer Liste Einträge löschen will, sollte man die Liste von hinten nach vorne durchlaufen, dann hat man weniger Problemen mit dem Index.

Es ist ja nicht mein Hauptziel, die doppelten Einträge zu löschen. Ich wollte alle Einträge, die den gleichen Schlüssel besitzen gruppieren. Das Löschen hatte ich nur gemacht, damit ich den gleichen Schlüssel nicht nochmal gruppiere.

PS: Warum meldest du dich hier eigentlich nicht an? Ich hab doch inzwischen schon häufiger von dir gelesen oder waren das immer andere? :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Foreach und for - Schleife Allgemeine Java-Themen 10
Monokuma Foreach Schleifen in Streams umändern Allgemeine Java-Themen 23
M Eigene forEach()-Methode funktioniert nicht. Allgemeine Java-Themen 2
D Ant foreach Allgemeine Java-Themen 0
R foreach oder nicht? Allgemeine Java-Themen 4
T Verschachtelte For-Schleife gibt falschen Wert zurück, Abbruchbedingung evtl. falsch? Allgemeine Java-Themen 9
A verschachtelte for-Schleife in einen Stream umwandeln? Allgemeine Java-Themen 4
A Wie schreibe ich eine For-Schleife in ein Stream API um? Allgemeine Java-Themen 12
W While Schleife funktioniert nicht ganz Allgemeine Java-Themen 4
H do-while Schleife funktioniert nicht wie ich es möchte Allgemeine Java-Themen 7
MangoTango Operatoren while-Schleife für Potenz Allgemeine Java-Themen 3
berserkerdq2 Wie synchronisiere ich eine for-Schleife Allgemeine Java-Themen 12
N Warum wird die For Schleife nicht betreten Allgemeine Java-Themen 4
M Schleife für einen TicTacToe Computer Allgemeine Java-Themen 5
Lukas2904 Schleife mit ansteuerung einer Klasse Allgemeine Java-Themen 5
A For-Schleife Allgemeine Java-Themen 5
J Algorithmen Analyse einer Schleife Allgemeine Java-Themen 6
1 Klassen Variabel aus Schleife übergeben Allgemeine Java-Themen 8
D "Automatisierte", variable verschachtele for-Schleife Allgemeine Java-Themen 9
F Schleife funktioniert nicht richtig Allgemeine Java-Themen 13
K For-Schleife <> oder != Operator verwenden? Allgemeine Java-Themen 2
J Einen Thread in einer Schleife Allgemeine Java-Themen 2
D While-Schleife - if Zweig unterbrechen Allgemeine Java-Themen 1
F Zweifache For-Schleife Allgemeine Java-Themen 6
P Operatoren Problem mit Zähler in recursiver Schleife Allgemeine Java-Themen 2
T String aus While Schleife für ganze Klasse sichtbar machen Allgemeine Java-Themen 5
M While-Schleife schneller, solange die Abbruchbedingung nicht vom Schleifeninneren abhängt Allgemeine Java-Themen 3
S Variablen String[] Array per schleife in int[] einlesen Allgemeine Java-Themen 8
D Methoden Buttons erscheinen doppelt nach Wiederholung in Schleife Allgemeine Java-Themen 1
RalleYTN Problem bei Schleife die durch einen 2D raum iterieren soll Allgemeine Java-Themen 1
T for - Schleife Allgemeine Java-Themen 1
J While Schleife ausführen bis Zahl = X Allgemeine Java-Themen 19
R Komplizierte Schleife Allgemeine Java-Themen 1
Q For-Schleife in String-Value Allgemeine Java-Themen 3
F Abstrakte Klasse in "For each" Schleife Allgemeine Java-Themen 1
F for-Schleife auf Kommandoebene ausgeben Allgemeine Java-Themen 9
P Input/Output java.util.Scanner in einer Schleife und Exception-Behandlung: Einlesen einer Zahl Allgemeine Java-Themen 4
P Erweiterte For Schleife Allgemeine Java-Themen 7
D Arraylist/For Schleife/Scanner Allgemeine Java-Themen 30
Y automatisierte for Schleife Allgemeine Java-Themen 13
B For schleife und weiter? Allgemeine Java-Themen 8
D Probleme bei for-Schleife Allgemeine Java-Themen 4
L einfache Verzinsung mit for-Schleife & Ausschluss von Werten beim Einlesen Allgemeine Java-Themen 5
N Frage zur while-Schleife Allgemeine Java-Themen 18
M for Schleife mit Swing Button abbrechen Allgemeine Java-Themen 7
M PdfPTable per for-Schleife befüllen Allgemeine Java-Themen 3
F for-Schleife mit : Allgemeine Java-Themen 5
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
W Problem mit Index in einer for-Schleife Allgemeine Java-Themen 8
A Collections Array-Elemente in ArrayList kopieren ohne Schleife Allgemeine Java-Themen 7
P Variablen Auf durch for-Schleife generierte JComboBox zugreifen Allgemeine Java-Themen 3
G while Schleife ausführen solange eine Taste gedrückt ist Allgemeine Java-Themen 14
W Berechnung Durchschnitt mit Schleife Allgemeine Java-Themen 9
S for-Schleife, while-Schleife Problem Allgemeine Java-Themen 6
H Netbeans Warning bei Thread.sleep in Schleife Allgemeine Java-Themen 4
A java.lang.NullPointerException bei Schleife Allgemeine Java-Themen 3
S Erste Schritte Exception beendet Schleife nicht - Methode macht trotz throw weiter? Allgemeine Java-Themen 9
R while schleife auf 3 durchgänge beschränken Allgemeine Java-Themen 6
V anstatt thread.join() einfach while schleife? Allgemeine Java-Themen 8
x22 for-Schleife Allgemeine Java-Themen 76
S Text in for Schleife in Label einfügen Allgemeine Java-Themen 4
J Schleife mit : Allgemeine Java-Themen 18
S Klassen in einer Schleife durchlaufen Allgemeine Java-Themen 11
E Schleife wird nicht ausgeführt!!! Allgemeine Java-Themen 8
C Schleife mit leerem Anweisungsblock wird trotz erfüllter Bedingung nicht verlassen Allgemeine Java-Themen 9
S Do-While Schleife bricht nicht ab Allgemeine Java-Themen 3
S Erste Schritte if-Anweisung in for- oder while-schleife umwandeln Allgemeine Java-Themen 3
K CheckBox schleife Allgemeine Java-Themen 2
D Methoden Thread Schleife Status Allgemeine Java-Themen 7
J Verschiedene Klassen als "Object" in ArrayList und dann in for-Schleife erzeugen!? Allgemeine Java-Themen 2
R In einer for Schleife bei einem Substring anfangen, wo man davor aufgehört hat Allgemeine Java-Themen 6
T Rekursion mit While Schleife kombinieren? Allgemeine Java-Themen 4
D Sterne Muster mit einer Schleife Allgemeine Java-Themen 5
Dragonfire Code Konvention for-Schleife / return Allgemeine Java-Themen 15
hdi Detail-Frage zur for-Schleife Allgemeine Java-Themen 9
J Thread pausieren, lange while-Schleife Allgemeine Java-Themen 8
Q Variable aus Schleife/Switch benutzen Allgemeine Java-Themen 7
J Erweiterte For-Schleife mit Vector Allgemeine Java-Themen 5
C Geschachtelte For-Schleife: Äußere Schleife wird nur einmal durchlaufen!? Allgemeine Java-Themen 3
W While-ESC-Schleife funktioniert nicht Allgemeine Java-Themen 3
W return Collection mit schleife durchsuchen Allgemeine Java-Themen 10
H Threads.... ich will aus der While-Schleife raus Allgemeine Java-Themen 6
calzone Warum wird nicht aus der Schleife gesprungen ? Allgemeine Java-Themen 2
lacyuu Schleife hängt sich auf, wieso?? Allgemeine Java-Themen 2
ModellbahnerTT Problem: Schleife über Textdatei Allgemeine Java-Themen 5
S Wie gross ist die Laufzeit für diese Schleife?? Allgemeine Java-Themen 8
J Schachbrett mit for- oder while-Schleife Allgemeine Java-Themen 22
I For- Schleife falsch? Allgemeine Java-Themen 8
T Schleife kurzzeitig anhalten Allgemeine Java-Themen 5
V Problem in While-Schleife Allgemeine Java-Themen 3
Escorter Switch in der Schleife! Allgemeine Java-Themen 4
C Auswertung der for each schleife? Allgemeine Java-Themen 2
J FOR-Schleife-Problem Allgemeine Java-Themen 10
G Schleife durch Button beenden Allgemeine Java-Themen 6
S Schleife funktioniert nicht Allgemeine Java-Themen 2
G Anonymen Buttons in for schleife ActionListener hinzufügen Allgemeine Java-Themen 5
T getParameter in while schleife Allgemeine Java-Themen 3
O while - Schleife unterbrechen mit break; Allgemeine Java-Themen 5
R array.length in For-Schleife verwenden? Allgemeine Java-Themen 22
V Schleife funktioniert nicht wie gewünscht Allgemeine Java-Themen 5

Ähnliche Java Themen


Oben