Добрая Зинаида и летние каникулы

  • 5
  • Недоступна
Зинаида Васильевна — классный руководитель 7-Б класса какой-то там террианской школы, подробности не важны. А важно то, что она дарит подарки ученикам в дни рождения. Везет не всем: летние именинники — в пролёте по причине каникул. Пишем программу для Зинаиды: создаем словарь с фамилиями и датами рождения, удаляем из него людей, родившихся летом.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (203)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизоваться
y-grek8 уровень, Киев
12 января, 20:09
промучился 2 полноценных вечера, поскольку делал через афтер() и бифор(), пытался не использовать "депрекейтед" методы класа Date.. почитал о Calendar, внедрил.. вспомнил, что в foreach нельзя менять мапу, нужно через итератор.ремув()... в онлайн компиляторе проверял вывод (так как задача не разрешает вывод).. столкнулся с ексепшеном парсинга.. а ошибка была в неправильном операторе.. && вместо ||
if (entry.getValue().after(summerEnd.getTime()) || entry.getValue().before(summerStart.getTime()))
жестяк, чуть не отчаялся совсем
Leo14 уровень, Москва
5 января, 00:14
хотел через getMouth(), но он deprecated, заморочился запилил через Calendar
Erik Ghukasyan18 уровень
2 января, 00:15
Я если превратим тип Date в String потом разделим с split("/"), потом сконвертируем в Integer.parseInt() и сравним, Лето или нет?
Red Lee16 уровень, Москва
3 января, 21:28
может просто использовать getMonth() ?
Erik Ghukasyan18 уровень
4 января, 10:11
Спасибо, совсем забыл о нем ))
Александр Ковалев9 уровень, Москва
четверг, 12:09
Удобный метод... так и решил, забив на предупреждение IDEA... кто что сможет пояснить, по поводу деприкейтед методов? сколько они еще будут работать? где, как искать замену?
Red Lee16 уровень, Москва
пятница, 23:14
Я думаю замена это SimpleDateFormat
Dmitry Dmitriev11 уровень
27 декабря 2018, 22:11
в одну строчку
map.values().removeIf(s -> s.toString().contains("Jul") || ...
Артём10 уровень
30 декабря 2018, 10:27
проходит и такой вариант: map.values().removeIf(s -> s.getMonth() >= *** && s.getMonth() <= ***); вместо *** нужно вставить номера месяцев, учитывая, что их нумерация начинается с 0.
4 января, 23:55
объясните как работает s -> s.toString()
Dmitry Dmitriev11 уровень
5 января, 21:32
попробую, сам только на стадии изучения, s -> s.toString() - это лямбда выражения, про них вы можете вкратце прочитать тут https://javarush.ru/groups/posts/845-lambda-vihrazhenija-na-primerakh... в моем случае s это аргумент (в качестве аргумента идет значение мапы с типом date), далее это аргумент передается в тело, а так как я использую метод ...contains("Jul")... для поверки входит ли "Jul" в какую либо строку, то мне нужно привести тип date к типу string, что и делает метод toString
Андрей Ка9 уровень, Минск
6 января, 12:37
Подскажите, почему в ... s.toString().contains("Jul") ... нужно использовать в названии месяца первые три буквы, а не полное?
7 января, 05:04
Спасибо!
Sipa Barskij15 уровень
8 января, 15:37
Дошел почти сам до такого : map.values().removeIf(s -> s.getMonth()==5); map.values().removeIf(s -> s.getMonth()==6); map.values().removeIf(s -> s.getMonth()==7); Но так не пропустило. А когда сделал в одну строчку , задав рейндж прошло. Отчего так?
Dmitry Dmitriev11 уровень
12 января, 11:00
потому что мы задаем формат даты в таком виде
DateFormat df = new SimpleDateFormat("MMMMM d yyyy", Locale.ENGLISH);
и вывод получается такой Mon Jul 04 00:00:00 MSD 1994, соответсвенно нам нужно искать по вхождения этой строки
Armen9 уровень, Москва
22 декабря 2018, 12:51
Calendar.MONTH
Leo14 уровень, Москва
5 января, 00:10
only hardcore
S3R3N1TY15 уровень, Санкт-Петербург
19 декабря 2018, 00:57
Решил с первой попытки, дам небольшую подсказку своего метода
String str = entry.getValue().toString();
            if (str.contains("Jun") || ,,,,,дальше думайте сами
Поиск, проверка условия и удаления осуществляются в итераторе Валидатор написал что решил лучше 69% P.S. глянул коменты, оказывается через лямбду решается одной строкой задача
Денис Сава9 уровень, Москва
10 декабря 2018, 18:50
Да блин, помучался.
Ruzalt9 уровень, Казань
3 декабря 2018, 21:55
Я форматировал месяц, перевел в верхний регистр, применил условие. Валидатор принимает решение. DateFormat df = new SimpleDateFormat("MMMM", Locale.ENGLISH); ..... Date value = pair.getValue(); String month = df.format(value).toUpperCase(); if (month.equals("JUNE") || month.equals("JULY") || month.equals("AUGUST")) iterator.remove();
Дмитрий16 уровень
28 ноября 2018, 06:23
Можно решить через LocalDate, у него есть метод получения номера месяца https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html
AlexeyVL9 уровень
13 ноября 2018, 13:20
Логика действий понятна. Не понятна реализация.