Задачу решил, путем просмотра других и тд И не до конца понимаю, мне нужна расшифровка того что я делаю 1.Создаем копию нашего исходного словаря, в методе remove....Duplicates, таким образом new HashMap<String, String>(map) - если нет то исправьте. 2.Перебираем элементы копии(pair), и присваиваем значение каждого элемента переменной value - вопрос, что это и откуда здесь pair? если по лекции - то так нужно писать 3.вот далее вопрос, наверное после понимания пункта 2, и этот пункт поймется - у нас еще один перебор, но уже pair1 - вопрос, что это и откуда здесь pair1? 4.Если посмотреть код далее, мы сравниваем значение из pair и pair1 - как будто две мапы,но у нас же copy - это копия мапы 5.Далее впринципе понятно, если есть совпадение - каждый раз вызывается второй метод, но непонятно с какими параметрами? Точнее передаются все элементы нашей основной мапы? 6. второй метод,опять у нас копия, это копия из первого метода или новая? в нее копируются элементы из исходной мапы,идет перебор и сравниваются значения получается второй копии с первой? и удаляются ключи с одинаковыми именами Чувствую что написал чушь по большей части, помоги разжевать..............
public static void removeTheFirstNameDuplicates(HashMap<String, String> map) {
        int count = 0;
        HashMap<String, String> copy = new HashMap<String, String>(map);
        for (Map.Entry<String, String> pair : copy.entrySet()) {
            String value = pair.getValue();
            int i = 0;
            for (Map.Entry<String, String> pair1 : copy.entrySet())  {
                if (pair1.getValue().equals(value)) {
                    i++;
                }
                if (i > 1) {
                    removeItemFromMapByValue(map,value);
                }

            }
        }

    }

    public static void removeItemFromMapByValue(HashMap<String, String> map, String value) {
        HashMap<String, String> copy = new HashMap<String, String>(map);
        for (Map.Entry<String, String> pair : copy.entrySet()) {
            if (pair.getValue().equals(value))
                map.remove(pair.getKey());
        }
    }