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

  • 5
  • Недоступна
Сложно представить себе ситуацию, в которой может понадобиться программа, которую мы предлагаем вам написать. Впрочем, маленькая модификация, и она обретает практический смысл. Также её можно представить частью чего-то большего (поиска?). Давайте создим словарь, занесём в него записи по принципу «фамилия» - «имя» и удалим людей с одинаковыми именами.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (219)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизоваться
Денис Сава9 уровень, Москва
воскресенье, 21:23
Кстати это только у меня почему то ничего не выдает System.out.println(string) если его в самом методе public static HashMap<String, String> createMap() написать. Хотел проверить, что в массиве , ничего на экран не выдает. Странно. Специально что ли отключили возможность вывести на экран?
denis20 уровень, Минск
17 ноября, 19:27
А вот я решил используя два строковых массива ArrayList. В первый забил все имена без повторений, а второй забил именами, которые содержались в первом массиве при условии что они повторяются. Получилось что все имена повторяющиеся 2 и более раза записаны во 2ом массиве.
dg16 уровень
15 ноября, 16:19
Сложное решение, но рабочее: сначала получил коллекцию значений, преобразовал ее в список1. После прошелся по этому списку1 и добавил в отдельный список2 все одинаковые неуникальные значения списка1. А после просто прошелся по списку2 и вызвал на нем предлагаемый метод.
AlexeyVL8 уровень
10 ноября, 16:12
Я чемпион по попыткам 42 :D Я ее долбил долбил, долбил долбил, долбил болбил, и все таки додолбил) Обидно что получилось только когда взялся за Collections.frequency(); Так как кажется что дал слабину)
Tyrant10 уровень
9 ноября, 15:39
Пошел через ArrayList значений, выискивая и превращая ВСЕ совпадающие слова в условное слово (пусть будет "dick"). Потом, как требуется в задании, вызываем метод removeItemFromMapByValue(map, "dick"); Вуаля. Работает! Да, долго(на задачу ушло 4-5 часов), не так удобно как надо, зато самостоятельное решение без подглядываний в готовые решения.
Riccio13 уровень, Москва
6 ноября, 09:23
Когда решал задачу через неявный вызов итератора - с использованием for each - получил "ConcurrentModificationException". Чтобы этого избежать пришлось сделать 2 копии основной карты и сравнивать их, и если находились дубликаты - удалять уже в оригинальной карте.
Радик14 уровень, Казань
9 ноября, 20:55
Аналогично)))
Дмитрий К.22 уровень, Иркутск
29 октября, 07:56
Короткое решение: 1. Создаем массив Set из map.values() 2. Пробегаем foreach по массиву set 2.2 Используем статик метод frequency класса Collections который подсчитывает количество переданного ему Object в коллекции. Если ответ более > 1 - вызываем removeItemFromMapByValue
Eugene Bass11 уровень, Днепр
30 октября, 16:07
Спасибо что с сетом подсказал! Достоинство сета оказалось в том, что он не позволяет добавлять дубликаты)
Леонид13 уровень
18 октября, 23:26
Потратил на эту задачу часа полтора-два да и то, наученный опытом, использовал подсказки в коментах. Во-первых, надо внимательно прочитать, что делает функция удаления removeItemFromMapByValue(). А именно удаляет ВСЕ пары КЛЮЧ-ЗНАЧЕНИЕ, которые совпадут по значению. Во-вторых, требуется удалить все повторы, ни одного не оставить, даже оригинала. Я воспользовался свойством HashSet, у которого должны быть уникальные значения, а также использовал хинт из функции removeItemFromMapByValue(), с копирование Map и проходу итератором по копии. На мой взгляд сложность задач сильно плавает, не хватает простых примеров подобного использования.
Юрий15 уровень, Москва
8 сентября, 21:42
Хочу высказать свое фи по поводу этой задачи и скрытых условий. Потратил две попытки на то что бы убедиться в том, что не смотря на то, что программа работает с использованием Массива строк, валидатор ее не принимает и отплевывает по условию "Метод removeTheFirstNameDuplicates() должен удалять из словаря всех людей, имеющие одинаковые имена." Хотя, фактически, метод removeTheFirstNameDuplicates ничего не удаляет, а только находит повторяющиеся переменные и уже найденные передает в метод removeItemFromMapByValue который собственно и удаляет все дублирующие значения. Сухое итого: Не смотря на то, что задачу можно решить, используя массив строк, задачу (Для валидатора) Нужно решать через через ArrayList.
Максим18 уровень
8 сентября, 15:18
Как я понял задачу: 1) создаем HashMap<String,String> mapa = new HashMap<>(); это мы все умеем и тут нечего пояснять. 2) нас просят работать только со значением (value) из нашей мапы, и мы говорим, хорошо, тогда мне можно просто создать список ArrayList<String> list, и в него внести значение (это можно сделать указав в скобочках значение map.values ( map подается на входе ( не забываем))) 3) мы такие а давайте пробежимся по списку, list, и у вас в голове сейчас, пф... да это проще всего, наверное это я точно запомнил и пишем такие for (String abracadabra : list) и бла бла бла 4) а давайте еще раз внутри списка пробежимся по этомуже списку, и если значения совпадут (спойлер: имя_значения№1.equals(имя_значения№2) тогда сделаем магию в цикле и заставим удалить эти значения, ужасным и коварным методом removeItemFromMapByValue вызвав этот метод как вы наврно уже знаете removeItemFromMapByValue(), и давате в скобках введем значения (map, имя_значения№1) Если кому помог, с вам френды на джава раш и плюсик :) всем удачи
Макс20 уровень, Киев
29 октября, 15:24
П**дец просто, я убил на эту дичь 5 часов!!!!!!!!!!!!