Помогите решить задачу. Удалить элементы map у которых значения повторяются
public class Solution {
public static Map<String, String> createMap() {
Map<String, String> map = new HashMap<>();
map.put("Alexeev1", "Maxim1");
map.put("Alexeev2", "Maxim2");
map.put("Alexeev3", "Maxim2");
map.put("Alexeev4", "Maxim3");
map.put("Alexeev5", "Maxim4");
map.put("Alexeev6", "Maxim5");
map.put("Alexeev7", "Maxim6");
map.put("Alexeev8", "Maxim7");
map.put("Alexeev9", "Maxim8");
map.put("Alexeev10", "Maxim9");
return map;
}
public static void removeTheFirstNameDuplicates(Map<String, String> map) {
//напишите тут ваш код
}
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) {
}
}
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
Как вариант - в отдельном Map посчитать сколько раз каждое значение встретилось, потом в исходном Map удалить те записи, где значение встретилось больше одного раза:
public static Map<String, Integer> countValues(Map<String, String> map) {
Map<String, Integer> result = new HashMap<>();
for(String value: map.values()) {
result.put(value, result.getOrDefault(value, 0) + 1);
}
return result;
}
public static void removeTheFirstNameDuplicates(Map<String, String> map) {
Map<String, Integer> count = countValues(map);
Map<String, String> copy = new HashMap<>(map);
for (Map.Entry<String, String> pair : copy.entrySet()) {
if (count.get(pair.getValue()) > 1) {
map.remove(pair.getKey());
}
}
}
public static void main(String[] args) {
var map = createMap();
removeTheFirstNameDuplicates(map);
System.out.println(map);
}
Результат:
{Alexeev9=Maxim8, Alexeev8=Maxim7, Alexeev1=Maxim1, Alexeev5=Maxim4, Alexeev4=Maxim3, Alexeev7=Maxim6, Alexeev6=Maxim5, Alexeev10=Maxim9}
Видно, что записи со значением Maxim2 выбыли