Колупаюсь с этой задачей уже большое количество времени. Сегодня осенило, что я вызывал на итерацию в removeTheFirstNameDuplicates основной список map, передавал из него значения в removeItemFromMapByValue где по идее из map удалялось значение, что нельзя сделать без итератора. (а как он работает с map я до сих пор не врублюсь), в связи с чем, было решено делать ещё копию основного списка map.
Пояснения по коду.
Делаю ещё одну копию основного списка на итерацию пойдёт он. (Копирование map в copy2 происходит через for, потому что, Ителледж почему-то на putAll ругается).
На итерацию идёт copy2.
Из него надо получить значение y которое потом передаётся в метод removeItemFromMapByValue где есть ещё одна копия map под названием copy (где Ителледж на putAll не ругается), которая впоследствии вызывается на итерацию, сравнивается с полученными значениями, после чего из map который ниразу не вызывался на итерацию удаляются значения.
Как вы поняли оно не работает, а у меня идеи кончились.
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> hs = new HashMap<>();
hs.put("Иванов", "Иван");
hs.put("Петров", "Иван");
hs.put("Сидоров", "Сергей");
hs.put("Спиридонов", "В");
hs.put("Овцев", "В");
hs.put("Хренов", "Г");
hs.put("Карпов", "В");
hs.put("Олигархов", "А");
hs.put("Семенов", "Р");
hs.put("Синицын", "Д");
return hs;
}
public static void removeTheFirstNameDuplicates(Map<String, String> map) {
HashMap <String, String> copy2 = new HashMap<>();
for (Map.Entry<String, String> pair: map.entrySet()){
String key = pair.getKey();
String value = pair.getValue();
copy2.put(key, value);
}
for (Map.Entry<String, String> pair: copy2.entrySet()){
String y = pair.getValue();
removeItemFromMapByValue(map, y);
}
}
public static void removeItemFromMapByValue(Map<String, String> map, String value) {
HashMap<String, String> copy = new HashMap<String, String>(map);
copy.putAll(map);
for (Map.Entry<String, String> pair : copy.entrySet()) {
if (pair.getValue().equals(value))
map.remove(pair.getKey());
}
}
public static void main(String[] args) {
}
}