Во-первых, не могу понять условие: "Метод removeTheFirstNameDuplicates() должен удалять из словаря всех людей, имеющие одинаковые имена."
Почему этот метод должен удалять одинаковые имена? У нас ведь за удаление отвечает метод removeItemFromMapByValue(). Если удалять будет метод removeTheFirstNameDuplicates(), тогда что останется методу removeItemFromMapByValue()?
Во-вторых, если передавать в метод removeItemFromMapByValue исходный map, и только одно значение name, то метод и будет удалять только одну пару дубликатов. Чтобы он удалял все пары, нужно либо в этот метод передавать все найденный дубликаты имен сразу (тогда это должен быть массив имен, а не одно имя), либо после каждого удаления должен возвращаться обновленный map с удаленной парой, и приходить обратно уже с новым значением name.
В общем, застрял на этой задаче.
Написал вот такой код, но он не проходит:
public class Solution {
public static HashMap<String, String> createMap() {
HashMap<String, String> map = new HashMap<>();
map.put("Иванов", "Иван" );
map.put("Петров", "Петр" );
map.put("Сидоров", "Сидор" );
map.put("Николаев", "Николай" );
map.put("Семенов", "Иван" );
map.put("Семенов1", "Семен1" );
map.put("Петров1", "Петр1" );
map.put("Иванов5", "Иван5" );
map.put("Олегов", "Олег" );
map.put("Романов", "Николай" );
return map;
}
public static void removeTheFirstNameDuplicates(HashMap<String, String> map) {
Iterator<Map.Entry<String,String>> iter = map.entrySet().iterator();
HashSet<String> temp = new HashSet<>();
while (iter.hasNext()){
Map.Entry<String, String> pair = iter.next();
if(!temp.add(pair.getValue())) {
removeItemFromMapByValue(map,pair.getValue());
}
}
}
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());
}
}
public static void main(String[] args) {
}
}package com.javarush.task.task08.task0817;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
/*
Нам повторы не нужны
*/
public class Solution {
public static HashMap<String, String> createMap() {
HashMap<String, String> map = new HashMap<>();
map.put("Иванов", "Иван" );
map.put("Петров", "Петр" );
map.put("Сидоров", "Сидор" );
map.put("Николаев", "Николай" );
map.put("Семенов", "Иван" );
map.put("чваеп", "ывери" );
map.put("еное", "Ивекноооьапан" );
map.put("цукекнегнр", "ро" );
map.put("Олегов", "Олег" );
map.put("Романов", "Николай" );
return map;
}
public static void removeTheFirstNameDuplicates(HashMap<String, String> map) {
Iterator<Map.Entry<String,String>> iter = map.entrySet().iterator();
HashSet<String> temp = new HashSet<>();
while (iter.hasNext()){
Map.Entry<String, String> pair = iter.next();
if(!temp.add(pair.getValue())) {
//System.out.println(pair.getValue());
removeItemFromMapByValue(map,pair.getValue());
}
}
}
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());
}
}
public static void main(String[] args) {
//Solution.removeTheFirstNameDuplicates(Solution.createMap());
}
}