Meine Idee, um doppelte Vornamen zu identifizieren und in einer List zu speichern:
- iteriere über eine Kopie der Map
- lösche das aktuelle Schlüssel-Wert-Paar aus der Kopie bzw. dem Iterator
- prüfe, ob der Vorname aus diesem Paar ein weiteres Mal in der Kopie enthalten ist
Durch "it.remove()" wird aber nicht nur das Paar aus der Kopie entfernt, sondern auch aus der Map.
Meine bisherige Recherche war leider erfolglos - kann mir hier jemand sagen, warum nicht nur aus der Kopie gelöscht wird?
package de.codegym.task.task08.task0817;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Iterator;
import java.util.ArrayList;
/*
Wir brauchen keine Wiederholungen
*/
public class Solution {
public static HashMap<String, String> mapErstellen() {
//schreib hier deinen Code
HashMap<String, String> map = new HashMap<String,String>();
map.put("a", "z");
map.put("b", "y");
map.put("c", "t");
map.put("d", "w");
map.put("e", "z");
map.put("f", "u");
map.put("g", "t");
map.put("h", "z");
map.put("i", "r");
map.put("j", "q");
return map;
}
public static void doppelteVornamenEntfernen(Map<String, String> map) {
//schreib hier deinen Code
Map<String, String> kopie = new HashMap<String, String>();
kopie = map;
System.out.println("Map: " + map);
System.out.println("Kopie: " + kopie);
List<String> list = new ArrayList<String>();
Iterator<Map.Entry<String, String>> it = kopie.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
it.remove();
System.out.println("While... Map: " + map);
System.out.println("While... Kopie: " + kopie);
if (kopie.containsValue(entry.getValue())) {
list.add(entry.getValue());
//System.out.println(list);
}
}
System.out.println("Liste: " + list);
System.out.println("Map: " + map);
System.out.println("Kopie: " + kopie);
for (String s : list){
System.out.println(s);
elementNachWertAusMapEntfernen(map, s);
System.out.println(map);
System.out.println("----------");
}
}
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> map = new HashMap<String,String>();
map = mapErstellen();
System.out.println(map);
doppelteVornamenEntfernen(map);
System.out.println(map);
}
}