Всем привет!
Подскажите, почему выкидывает исключение? Логика вроде простая: первый for проходит по значениям и отдаёт их во вложенный, в котором при наличии дубля прибавляется счётчик. Если счётчик больше 1, то значение отдаётся в метод "removeItemFromMapByValue", который модифицирует map.
package com.javarush.task.task08.task0817;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
/*
Нам повторы не нужны
*/
public class Solution {
public static Map<String, String> createMap() {
Map<String, String> names = new HashMap<String, String>();
names.put("Петров", "Саша");
names.put("Иванович", "Миша");
names.put("Сидоров", "Олег");
names.put("Иванков", "Олег");
names.put("Кустова", "Саша");
names.put("Дубинин", "Сергей");
names.put("Иванов", "Олег");
names.put("Женьков", "Виктор");
names.put("Тимофеев", "Олег");
names.put("Кустов", "Гиша");
return names;
}
public static void removeTheFirstNameDuplicates(Map<String, String> map) {
int count = 0;
for(Map.Entry<String, String> pair : map.entrySet()) {
String valueX = pair.getValue();
for (Map.Entry<String, String> pair2 : map.entrySet()) {
String value = pair2.getValue();
if (valueX.equals(value)) {
count++;
}
}
if (count > 1) {
removeItemFromMapByValue(map, valueX);
}
}
}
public static void removeItemFromMapByValue(Map<String, String> map, String value) {
Map<String, String> copy = new HashMap<>(map);
for (Map.Entry<String, String> pair : copy.entrySet()) {
if (pair.getValue().equals(value)) {
map.remove(pair.getKey());
}
}
}
public static void main(String[] args) {
Map<String, String> name = createMap();
removeTheFirstNameDuplicates(name);
for (Map.Entry<String, String> pair : name.entrySet())
{
String key = pair.getKey();
String value = pair.getValue();
System.out.println(key + " : " + value);
}
}
}