Собственно - вроде все ок, мапу во время итерации только через итератор модифицирую, что-то даже удаляет, но - в итоге мапа остается пустая потому как передаваемое значение совпадает с самим собой и соответственно себя же и трет. Если бы вместе со значением передать в метод еще и ключ и не тереть тот ентри, ключ которого соответствует переданому значению - то проблема бы решилась, мне кажеться. Вытереть ентри с таким ключем - только если нашелся еще какой-то ентри с таким-же значением, но для этого нужно поправить метод, который был дан. Может кто в курсе из тех кто решил задачу - можно ли трогать код даного метода или нет?
package com.javarush.task.task08.task0817;

import java.util.*;

/*
Нам повторы не нужны
*/

public class Solution {
    public static HashMap<String, String> createMap() {
        //напишите тут ваш код
        HashMap<String,String> namesSurnames = new HashMap<>();
        while (namesSurnames.size()<10)
        {
            namesSurnames.put("Surname" + (int)(Math.random()*15),
                    "Name" + (int)(Math.random()*5));
        }
        return namesSurnames;
    }

    public static void removeTheFirstNameDuplicates(Map<String, String> map) {
        //напишите тут ваш ко
        /*String[] values = map.values().toArray(new String[map.size()]);
        String[] keys = map.keySet().toArray(new String[map.size()]);
        Iterator<Map.Entry<String,String>> it = map.entrySet().iterator();
        for(int i=0; it.hasNext(); i++)
        {
            values[i] = it.next().getValue();
        }
        for(String s:
        values)
        {
            removeItemFromMapByValue(map,s);
            values = map.values().toArray(new String[map.size()]);
        }*/


        String[] values = map.values().toArray(new String[map.size()]);
        //String[] duplicates = new String[map.size()];
        Set<String> duplicates = new HashSet<>();
        int index = 0;
        for(int i=0; i<values.length;i++)
        {
            for(int j=0; j<values.length; j++)
            {
                if(values[i].equals(values[j]) && i != j)
                {
                    //duplicates[index] = values[j];
                    duplicates.add(values[i]);
                }
            }
            //index++;
        }

        for(String s:duplicates)
        {
            removeItemFromMapByValue(map,s);
        }




    }

    public static void removeItemFromMapByValue(Map<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());
        }
    }

    public static void main(String[] args) {
        HashMap<String,String> namesSurnames = createMap();
        removeTheFirstNameDuplicates(namesSurnames);
        System.out.println("End");

    }
}