Собственно - вроде все ок, мапу во время итерации только через итератор модифицирую, что-то даже удаляет, но - в итоге мапа остается пустая потому как передаваемое значение совпадает с самим собой и соответственно себя же и трет. Если бы вместе со значением передать в метод еще и ключ и не тереть тот ентри, ключ которого соответствует переданому значению - то проблема бы решилась, мне кажеться. Вытереть ентри с таким ключем - только если нашелся еще какой-то ентри с таким-же значением, но для этого нужно поправить метод, который был дан. Может кто в курсе из тех кто решил задачу - можно ли трогать код даного метода или нет?
package com.javarush.task.task08.task0817;
import java.util.*;
/*
Нам повторы не нужны
*/
public class Solution {
public static HashMap<String, String> createMap() {
//напишите тут ваш код
HashMap<String,String> namesSurnames = new HashMap<>();
while (namesSurnames.size()<10)
{
namesSurnames.put("Surname" + (int)(Math.random()*15),
"Name" + (int)(Math.random()*5));
}
return namesSurnames;
}
public static void removeTheFirstNameDuplicates(Map<String, String> map) {
//напишите тут ваш ко
/*String[] values = map.values().toArray(new String[map.size()]);
String[] keys = map.keySet().toArray(new String[map.size()]);
Iterator<Map.Entry<String,String>> it = map.entrySet().iterator();
for(int i=0; it.hasNext(); i++)
{
values[i] = it.next().getValue();
}
for(String s:
values)
{
removeItemFromMapByValue(map,s);
values = map.values().toArray(new String[map.size()]);
}*/
String[] values = map.values().toArray(new String[map.size()]);
//String[] duplicates = new String[map.size()];
Set<String> duplicates = new HashSet<>();
int index = 0;
for(int i=0; i<values.length;i++)
{
for(int j=0; j<values.length; j++)
{
if(values[i].equals(values[j]) && i != j)
{
//duplicates[index] = values[j];
duplicates.add(values[i]);
}
}
//index++;
}
for(String s:duplicates)
{
removeItemFromMapByValue(map,s);
}
}
public static void removeItemFromMapByValue(Map<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) {
HashMap<String,String> namesSurnames = createMap();
removeTheFirstNameDuplicates(namesSurnames);
System.out.println("End");
}
}