Нам повторы не нужны

  • 10
  • Недоступна
Сложно представить себе ситуацию, в которой может понадобиться программа, которую мы предлагаем вам написать. Впрочем, маленькая модификация, и она обретает практический смысл. Также её можно представить частью чего-то большего (поиска?). Давайте создим словарь, занесём в него записи по принципу «фамилия» - «имя» и удалим людей с одинаковыми именами.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (479)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
вчера, 18:15
Помогите, пожалуйста. НаГ*кодил ((((. не удаляет повторы, хотя в arr положил все дублирующие имена
Игорь8 уровень, Красноярск
11 часов назад
Я реализовал через списки Set Set<String> set = new HashSet<>(); Set<String> set2 = new HashSet<>(); for (String value : map.values()) { if (set.contains(value)) set2.add(value);//напишите тут ваш код set.add(value);
Илья18 уровень
позавчера, 14:57
Я совсем не понимаю чего от меня хотят в условии...
Артём Кравченко9 уровень, Таганрог
позавчера, 15:39
Из словаря нужно удалить все записи с одинаковыми именами. К примеру, записи «Иванов Павел» и «Петров Павел» должны быть удалены из списка.
Илья18 уровень
вчера, 05:42
это я понял, но нижний метод разве не делает копию мапы и удаляет из неё одинаковые значения? я алгоритм в голове не могу построить, не знаю за что зацепится логически.
Артём Кравченко9 уровень, Таганрог
вчера, 06:54
Метод removeItemFromMapByValue создаёт копию исходной мапы, но ничего из неё не удаляет до тех пор, пока ему в параметре "String value" не передадут значение (Имя), которое нужно удалить.
Cyclone C8 уровень, Москва
среда, 12:04
Ребята, убил на нее два дня, но задача тупая как сибирский валенок... Вопрос стоит только в нашем восприятии ее реализации, как решить ее просто: 1. создать 10 записей в мапу 2. в методе удаления имен создать ArrayList, который будет содержать только дублированные значения из Map. 3. Сделать цикл, в котором вышеупомнутый лист, будет давать ссылку на удаление дублиатов по значению и передать в него map и значение из листа... ВСЁ!!! Карл, я плачу.
Rustam9 уровень, Казань
11 февраля, 16:07
Создаем массив заполняем и возвращаем его, в методе removeTheFirstNameDuplicates создаем копии массива map (map2, map3), затем через цикл проходим по массиву for (Map.Entry<String, String> pair : map2.entrySet()), в цикле добавляем условие map3.remove(pair.getKey()); и if (map3.containsValue(pair.getValue())) то removeItemFromMapByValue(map, pair.getValue()); метод removeItemFromMapByValue не трогаем. Ну и в main все вызываем.
GrinTea8 уровень
11 февраля, 12:50
После решения этой задачи я чувствую пустоту внутри. Хто я?
broplz9 уровень, Алматы
18 февраля, 08:36
ахахаххах, ты лучший коментатор года)))))))))))))))))))))))))
Артём Кравченко9 уровень, Таганрог
четверг, 18:18
Аналогично, тоже пустота внутри.
Caleepso10 уровень, Москва
11 февраля, 10:49
Решила через Collection: 1. сначала в отдельный ArrayList пихаем все имена (использовала лямбду map.forEach((a,b) -> nList.add(b)); ) 2. посредством Collection.frequency в цикле прошлась по всем значениям в ArrayList и дергала метод removeItemFromMapByValue там, где frequency >1.
AlexFlorid10 уровень, Miami
7 февраля, 16:36
Пытаюсь решить без создания Set or Arrays. Почему не проходит и выкидывает Exception in thread "main" java.util.ConcurrentModificationException? Подскажите люди добрые.
Map<String,String> copy = new HashMap<>();
        for(Map.Entry<String,String> pair : map.entrySet()){
            if(!copy.containsValue(pair.getValue())){
                copy.put(pair.getKey(), pair.getValue());
            }
           else removeItemFromMapByValue(map,pair.getValue());
игорь12 уровень, Минск
9 февраля, 13:41
Если честно, голова уже не варит, но вообще java.util.ConcurrentModificationException означает что ты пытаешься изменить мапу во время работы в ней итератора. Может поможет)
Морокеи18 уровень, Москва
13 февраля, 17:21
Нельзя запускать итератор мапы и в нем удалять пары ключ-значений. В итератор мы можем пихнуть копию мапы и уже относительно сопоставлений значений копии, прогоняемой через два итератора (один в другом), мы удаляем найденные ключи с одинаковым значением в исходной мапе.
satird8 уровень, Минск
7 февраля, 14:51
Моё решение: 1) В методе removeTheFirstNameDuplicates создаем дополнительно HashSet и ArrayList. 2) В цикле Map проводим проверку (if) если в HashSet есть value или нет
if (hashSet.contains(value))
. 3) Если есть добавляем value в ArrayList 4) Если нет, то добавляем в HashSet. 5) По итогу получаем ArrayList с повторяющимися "именами" . Проходим по нему циклом вызывая метод removeItemFromMapByValue
for (int i = 0; i < arrayList.size(); i++) {
            removeItemFromMapByValue(map, arrayList.get(i));
        }
IVANEZ14 уровень, Санкт-Петербург
2 февраля, 07:12
Да... Тут надолго запнулся. Рекомендую обратить внимание на корректность тестирования - добавить несколько повторов с разными именами. Решил по аналогии с уже реализованной функцией: Map<String, String> copia = new HashMap<>(map); только после вызова реализованной функции нужно обновлять копию copia = new HashMap<>(map); до тех пор, пока вызова не произойдёт
Pavel Mironov (Miroha)16 уровень, Москва
31 января, 12:33
Можно "засунуть" значения в Set, который удалит все дубликаты и обратно значения из множества запаковать в мапу:
Set<String> set = new HashSet<>();
map = map.entrySet()
         .stream()
         .filter(entry -> set.add(entry.getValue()))
         .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
Но такое решение не принимает.