public static void removeTheFirstNameDuplicates(HashMap<String, String> map) {
HashMap<String, String> clonemap = new HashMap<String, String>(map);
for (Map.Entry<String, String> one : clonemap.entrySet()) {
String value = one.getValue();
clonemap.remove(one.getKey());
if (clonemap.containsValue(value)) {
removeItemFromMapByValue(map, value);
}
}
}
Как я понимаю, код делает следующее:
1) Создает копию (clonemap) map;
2) В копии ищет "значение" объекта в clonemap. Присваивает это "значение" переменной value;
3) По ключу удаляет объект из, опять же, копии (по ключу, потому что ключ уникален, и с ним удалится весь объект)
4) Ищет, содержит ли clonemap value (если объект, который мы удалили, обладал исключительным именем (например, он был назван "Катей", а все остальные "Сашей"), то if не выполняется. Если мы удалили "Сашу", и у нас остались еще "Саши", в if передаем изначальную карту map и "Сашу", а второй метод уже сам напишет всем бедным Сашам смертный приговор.
P.S. второй метод я здесь не прописала, он является шаблоном задачи.
Но все равно не выполняются два последних требования.
По дебагу у меня нет возможности пропустить код, поэтому прошу вашей помощи - где ошибка? Складывается ощущение, что я неправильно понимаю материал и, соответственно, неверно читаю написанный собой же код.package com.javarush.task.task08.task0817;
import java.util.HashMap;
import java.util.Map;
/*
Нам повторы не нужны
*/
public class Solution {
public static HashMap<String, String> createMap() {
HashMap<String, String> map = new HashMap<String, String>();
map.put("L", "Abrakadabra");
map.put("A", "Kianu");
map.put("B", "Kianu");
map.put("C", "Puh");
map.put("D", "Santos");
map.put("E", "Vantuz");
map.put("F", "Santos");
map.put("G", "Mama");
map.put("H", "Papa");
map.put("I", "Lera");
return map;
}
public static void removeTheFirstNameDuplicates(HashMap<String, String> map) {
HashMap<String, String> clonemap = new HashMap<String, String>(map);
for (Map.Entry<String, String> one : clonemap.entrySet()) {
String value = one.getValue();
clonemap.remove(one.getKey());
if (clonemap.containsValue(value)) {
removeItemFromMapByValue(map, value);
}
}
}
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) {
}
}