Пересматривая задачу 0817.
Задача немного упрощена, ищем и удаляем копии сразу в removeTheFirstNameDuplicates()
Не пойму как избавиться от эксепшена в сабже.
Интересует использование итератора во вложенных циклах (for, while, оба представлены в коде) для модификации мапы.
class Solution {
public static Map<String, String> createMap() {
Map<String, String> map = new HashMap<>();
map.put("one", "1");
map.put("two", "2");
map.put("three", "3");
map.put("four", "4");
map.put("five", "5");
map.put("six", "6");
map.put("seven", "7");
map.put("eight", "8");
map.put("nine", "9");
map.put("ten", "1");
return map;
}
/*public static void removeTheFirstNameDuplicates(Map<String, String> map) {
int count;
Iterator<Map.Entry<String, String>> iterator1 = map.entrySet().iterator();
while (iterator1.hasNext()) {
Map.Entry<String, String> entry1 = iterator1.next();
count = 0;
Iterator<Map.Entry<String, String>> iterator2 = map.entrySet().iterator();
while (iterator2.hasNext()) {
Map.Entry<String, String> entry2 = iterator2.next();
if (entry2.getValue().equals(entry1.getValue())) {
count++;
if (count > 1) {
iterator2.remove();
}
}
}
}
}*/
public static void removeTheFirstNameDuplicates(Map<String, String> map) {
int count;
for (Iterator<Map.Entry<String, String>> iterator1 = map.entrySet().iterator(); iterator1.hasNext(); ) {
Map.Entry<String, String> entry1 = iterator1.next();
count = 0;
for (Iterator<Map.Entry<String, String>> iterator2 = map.entrySet().iterator(); iterator2.hasNext(); ) {
Map.Entry<String, String> entry2 = iterator2.next();
if (entry1.getValue().equals(entry2.getValue())) {
count++;
if (count > 1) {
iterator2.remove();
}
}
}
}
}
public static void main(String[] args) {
Map<String, String> map = createMap();
System.out.println(map);
removeTheFirstNameDuplicates(map);
System.out.println(map);
}
}