Добрый день. Нужно удалить элементы map, которые являются дублями по значению.
Вроде удаляются, но вместе с дублями метод косит и сами элементы, у которых были дубли. Метод removeItemFromMapByValue удаляет всё, что замечено в дублировании, так уж он устроен... Ума не приложу, как оставить один экземпляр, а удалить только дубли по значению.
Подскажите, пожалуйста, куда копать. Последняя задача на 8 уровне осталась, не даёт двигаться дальше)
package com.javarush.task.task08.task0817;
import java.lang.reflect.Array;
import java.util.*;
/*
Нам повторы не нужны
*/
public class Solution {
public static Map<String, String> createMap() {
//напишите тут ваш код
Map<String, String> map = new HashMap<>();
map.put("Зазаа", "Саня2");
map.put("Завза", "Витя2");
map.put("Зпрраза", "Гена1");
map.put("Запза", "Юра1");
map.put("Завыаза", "Саня2");
map.put("Запавза", "Витя2");
map.put("Завапза", "Дима1");
map.put("Запваавза", "Жора1");
map.put("Завапвпза", "Джекки1");
map.put("Запвуаза", "Будда1");
return map;
}
public static void removeTheFirstNameDuplicates(Map<String, String> map) {
//напишите тут ваш код
// создал Map
map = createMap();
//создал аррайлист
ArrayList<String> list = new ArrayList<>();
//скопировал в него значения из мап
for(String pe : map.values()){
list.add(pe);
}
//отсортировал лист
Collections.sort(list);
//если есть повтор, вызываю метод removeItemFromMapByValue
// !!!!!!!!! И ТУТ УДАЛЯЮТСЯ НЕ ТОЛЬКО ДУБЛИ, НО И ИМЕНА, У КОТОРЫХ БЫЛИ ДУБЛИ
for(int i = 0; i < list.size()-1; i++){
if(list.get(i).equals(list.get(i+1))){
removeItemFromMapByValue(map, list.get(i));
}
}
}
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) {
// !!!!!!!!!! ПРОВЕРЯЕМ РАБОТУ КОДА !!!!!!!!!!!!!!!!
// создал Map
Map<String, String> map = createMap();
//создал аррайлист
ArrayList<String> list = new ArrayList<>();
//скопировал в него значения из мап
for(String pe : map.values()){
list.add(pe);
}
//отсортировал лист
Collections.sort(list);
//если есть повтор, вызываю метод removeItemFromMapByValue
for(int i = 0; i < list.size()-1; i++){
if(list.get(i).equals(list.get(i+1))){
removeItemFromMapByValue(map, list.get(i+1));
}
}
//выводим результат на экран (для задания не надо)
for(Map.Entry<String, String> pair : map.entrySet()){
System.out.println(pair.getKey() + " " + pair.getValue());
}
System.out.println(map.size());
}
}