Пересматривая задачу 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);
    }
}