public class Solution {
    public static Map<String, String> createMap() {
        Map<String, String> map = new HashMap<>();
        map.put("Филипsпов", "Вадasdим");
        map.put("Филиппfов", "Вадим");
        map.put("Филиппdfgов", "Вадим");
        map.put("Филиппоgв", "Вадим");
        map.put("Филиппоaв", "Вадим");
        map.put("Филиппwqов", "Вадим");
        map.put("Филиппоrewв", "Ваsдим");
        map.put("Филиппsоqв", "Вадим");
        map.put("Филиппsadов", "Ваsdим");
        map.put("Филиппqweов", "Вадим");
        return map;
    }

   public static void removeTheFirstNameDuplicates(Map<String, String> map) {

        Collection<String> values = map.values();

        List<String> valueList = new ArrayList<>(values);

        Collections.sort(valueList);

        for(String firstName : valueList)
            if(Collections.frequency(valueList, firstName)>1)
                removeItemFromMapByValue(map, firstName);
    }

    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) {

    }
}
Сначала создаем мапу, после в методе removeTheFirstNameDuplicates достаем все значения с мапы, создаем список с добавлением всех значений, сортируем его. Дальше создаем цикл for, в нем создаем переменную типа String и вот дальше я ничего не понял... Объясните пожалуйста.