Ich hatte mir das so gedacht:
das Methode geht Schritt für Schritt durch die Map.
Sie holt sich den ersten Value und speichert diesen als Namen.
Mit dem Namen rufe ich dann die Funktion "Element nach Namen ...entfernen" auf.
Die Funktion geht dann die Map durch, vergleicht die Namen mit dem gespeicherten Namen und entfernt alle Einträge.
Danach geht es zurück in die for-Schleife und das nächste Element wird aufgerufen und alles beginnt von vorn, bis das letzte Element der Map abgearbeitet wurde.
Leider tut der Code das aber nicht.
Ich bekomme immer folgende Fehlermeldung:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextNode(HashMap.java:1445)
at java.util.HashMap$EntryIterator.next(HashMap.java:1479)
at java.util.HashMap$EntryIterator.next(HashMap.java:1477)
at de.codegym.task.task08.task0817.Solution.doppelteVornamenEntfernen(Solution.java:31)
at de.codegym.task.task08.task0817.Solution.main(Solution.java:57)
Ich könnte mir vorstellen, dass das Problem ist, dass ich ja den Eintrag nach dem ich Filter auch immer lösche.
package de.codegym.task.task08.task0817;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/*
Wir brauchen keine Wiederholungen
*/
public class Solution {
public static HashMap<String, String> mapErstellen() {
//schreib hier deinen Code
HashMap<String, String> map = new HashMap<>();
map.put("Pitt", "Brad");
map.put("Jolie", "Angelina");
map.put("Hanks", "Tom");
map.put("Stallone", "Sylvester");
map.put("Miller", "Brad");
map.put("Johnson", "Scarlett");
map.put("Lopez", "Jennifer");
map.put("Anishton", "Jennifer");
map.put("Pfeiffer", "Michelle");
map.put("Marceau", "Sophie");
return map;
}
public static void doppelteVornamenEntfernen(Map<String, String> map) {
//schreib hier deinen Code
for (Map.Entry <String, String> paar1 : map.entrySet()) {
String name = paar1.getValue();
elementNachWertAusMapEntfernen(map, name);
}
}
public static void elementNachWertAusMapEntfernen(Map<String, String> map, String wert) {
HashMap<String, String> kopie = new HashMap<String, String>(map);
for (Map.Entry<String, String> paar : kopie.entrySet()) {
if (paar.getValue().equals(wert))
map.remove(paar.getKey());
}
}
public static void main(String[] args) {
HashMap<String, String> test = mapErstellen();
for (Map.Entry<String, String> x : test.entrySet()) {
System.out.println(x.getKey() + " " + x.getValue());
}
System.out.println("--------------");
elementNachWertAusMapEntfernen(test, "Angelina");
for (Map.Entry<String, String> x : test.entrySet()) {
System.out.println(x.getKey() + " " + x.getValue());
}
System.out.println("--------------");
doppelteVornamenEntfernen(test);
for (Map.Entry<String, String> x : test.entrySet()) {
System.out.println(x.getKey() + " " + x.getValue());
}
System.out.println("--------------");
}
}