Код вроде работает как надо, сделал только модификацию в метод removeItemFromMapByValue
добавил break; после удаления элемента из map. Потому что если убрать break то тогда удаляет все копии переданной строки из map будь их хоть 30 если например просто вызвать метод ради интереса просто проверить функционал вне циклов (потому как сам метод имеет свой итератор и проходиться по элементам снова и снова пока не удалит все ее копии).
package com.javarush.task.task08.task0817;
import java.util.*;
/*
Нам повторы не нужны
*/
public class Solution {
public static HashMap<String, String> createMap() {
//напишите тут ваш код
HashMap<String, String> map = new HashMap<>();
map.put("Maxwell", "Nella");
map.put("Beren", "Nella");
map.put("Jensen", "Isabelle");
map.put("Drake", "Aidyn");
map.put("Dun", "Damien");
map.put("Dunn", "Damien");
map.put("Bean", "Isabelle");
map.put("Weis", "Leon");
map.put("Weiss", "Leon");
map.put("Lewis", "Jamir");
return map;
}
public static void removeTheFirstNameDuplicates(Map<String, String> map) {
//напишите тут ваш код
List<String> copy = new ArrayList<>(map.values());
String temporaryValue;
for(int i = 0; i < copy.size(); i++) {
temporaryValue = copy.get(i);
for(int j = i + 1; j < copy.size(); j++) {
if(temporaryValue.equals(copy.get(j))) {
removeItemFromMapByValue(map, copy.get(j));
copy.remove(copy.get(j));
i--;
}
}
}
}
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());
break;
}
}
}
public static void main(String[] args) {
removeTheFirstNameDuplicates(createMap());
}
}