Вроде, все реализованно правильно, хотя и кривовато, так как думаю, что можно было короче. Но так или иначе, если под конец перед вызовом в цикле for метода removeItemFromMapByValue вывести список list_doubl, то в нем будут правильные ключи [B, C, E, G, H, M] для удаления. Далее я просто передаю каждый ключ в уже заранее реализованный метод removeItemFromMapByValue, но условие все равно не выполняется. Почему? Я ведь нашел все нужные ключи, разве метод не должен был их удалить?
package com.javarush.task.task08.task0817;
import java.util.HashMap;
import java.util.*;
/*
Нам повторы не нужны
*/
public class Solution {
public static Map<String, String> createMap() {
//напишите тут ваш код
Map<String, String> map = new HashMap<>(); //Было лень писать реал имена
map.put("A","25");
map.put("B","2");
map.put("C","3");
map.put("D","1");
map.put("E","2");
map.put("F","4");
map.put("G","5");
map.put("H","3");
map.put("M","5");
map.put("N","8");
return map;
}
public static void removeTheFirstNameDuplicates(Map<String, String> map) {
//напишите тут ваш код
Set<String> set = new HashSet<>(); //Множество со всеми значениями словаря
for(Map.Entry<String,String> pair : map.entrySet()){ //Заполняю множество
set.add(pair.getValue());
}
Set<String> set_doubl = new HashSet<>();
for(String str: set){ //Тут нахожу все value из словаря, которые повторяются 2 и более раз
int numb = 0;
for(Map.Entry<String,String> pair : map.entrySet()){
String val = pair.getValue();
if(pair.getValue().equals(str)) numb++;
if(numb>=2){
set_doubl.add(str);
}
}
}
List<String> list_doubl = new ArrayList<>(); //Лист для ключей повторяющихся записей
for(Map.Entry<String,String> pair : map.entrySet()){ //Заполняю его
String val = pair.getValue();
if(set_doubl.contains(val)) list_doubl.add(pair.getKey());
}
for(String str: list_doubl){ //Ну и вызываю уже созданный метод для удаления
removeItemFromMapByValue(map, str);
}
}
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(createMap());
}
}