Всем привет. Этот код рабочий, написал его с пояснениями. Он удаляет все повторяющиеся имена из мэпа. Будь их 2 или 3 или будь они разные, но повторяющиеся.
Но джава Раш не принимает задачу. Жалуется, что код не удаляет повторяющиеся имена. Что делать?
package com.javarush.task.task08.task0817;
import java.util.HashMap;
import java.io.IOException;
import java.util.Map;
import java.util.*;
/*
Нам повторы не нужны
*/
public class Solution {
public static Map<String, String> createMap() {
Map<String, String> map=new HashMap<String, String>();
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(Map<String, String> map) {
Map<String, String> copy2 = new HashMap<>(map); //создали копию мэпа для комфортной работы с его значениями
ArrayList<String>list=new ArrayList<String>(); //создали список для значений из мепа
for(Map.Entry<String,String>out:copy2.entrySet())
{
String value=out.getValue();
list.add(value);//добавили значения мепа в список
}
ArrayList<String>povtor=new ArrayList<String>();
String duble;
Collections.sort(list);//сортировка списка значений, одинаковые имена будут стоять рядом.это надо для легкого поиска совпадений
for(int i=1;i<list.size();i++)
{//поиск совпадений и запихиваем их в список повторов
if(list.get(i)==(list.get(i-1)))
{
duble=list.get(i);
povtor.add(duble);
}
else{}
}
Set<String>spis=new HashSet<String>(povtor);//создали список сет и перевели в него аррейЛист Дубликаты автоматом удалятся
ArrayList<String>list2=new ArrayList<String>(spis);//перевели из списка сет в аррей лист, для удобного использования
String[]slova=new String[list2.size()];//создаем массив стринг для взаимодействия с методом по удалению
for(int t=0;t<list2.size();t++)
{//сую значения списка в обычный массив,чтобы заюзать в методе-удалителе
slova[t]=list2.get(t);
removeItemFromMapByValue(copy2, slova[t]);
}
//ArrayList<String>proverka=new ArrayList<String>();
//for(Map.Entry<String,String> pair2:copy2.entrySet()){
//String value2=pair2.getValue();
// proverka.add(value2);
//}
//for(String viv:proverka){
// System.out.println(viv);
//} можно вывести для проверки. Все работает
}
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());
}
}