Сделал по аналогии с кодом автора предыдущего поста, не работает нифига.. В мэйне крутил вертел переменные, методы, мапы, одно в другое, через третье - ни так ни сяк, ни туда, ни сюда - сдаюсь. Не удаляет в итоге.
package com.javarush.task.task08.task0816;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/*
Добрая Зинаида и летние каникулы
*/
public class Solution {
public static Map<String, Date> createMap() throws ParseException {
DateFormat dateFormat = new SimpleDateFormat("MMMMM d yyyy", Locale.ENGLISH);
Map<String, Date> map = new HashMap<>();
map.put("Сталлоне", dateFormat.parse("MAY 1 2012"));
map.put("Петров", dateFormat.parse("JUN 4 1988"));
map.put("Иванов", dateFormat.parse("AUGUST 25 1999"));
map.put("Сидоров", dateFormat.parse("OCTOBER 5 2000"));
map.put("Лалала", dateFormat.parse("DECEMBER 14 2001"));
map.put("Лололо", dateFormat.parse("APRIL 16 1913"));
map.put("Расрас", dateFormat.parse("SEPTEMBER 8 1955"));
map.put("Два", dateFormat.parse("JULY 30 2005"));
map.put("Парам", dateFormat.parse("OCTOBER 2 1975"));
map.put("Пампам", dateFormat.parse("MARCH 17 1989"));
return map;
}
public static void removeAllSummerPeople(Map<String, Date> map) throws ParseException {
Iterator<Map.Entry<String,Date>> iterator = map.entrySet().iterator();
DateFormat dateFormat2 = new SimpleDateFormat("MMMMM", Locale.ENGLISH);
Date jun = dateFormat2.parse("JUN");
Date jul = dateFormat2.parse("JUL");
Date aug = dateFormat2.parse("AUG");
while (iterator.hasNext()){
Map.Entry<String,Date> pair = iterator.next();
String key = pair.getKey();
Date value = pair.getValue();
if(value.equals(jun)||value.equals(jul)||value.equals(aug)){
iterator.remove();
}
}
}
public static void main(String[] args) throws ParseException {
Map<String,Date> map = new HashMap<>(createMap());
removeAllSummerPeople(map);
for(Object o : map.entrySet()){
System.out.println(o);
}
}
}
Александр
32 уровень
Памагите😖🔫
Решен
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
IceBergMaster
27 июня 2019, 08:36полезный
Даты здесь так сравнивать никак не выйдет, вот
ты создал дату, указав только месяц, значит остальные элементы даты будут выставлены по умолчанию, т.е. 1 число 70-го года, 0 минут/часов/секунд, и если у тебя Петров "JUN 4 1988" то эти даты ну никак не будут равны. Сравнивать нужно только месяцы. +1
Александр
27 июня 2019, 09:16
вот, я об этом тоже думал сначала, пытался вытащить месяц из значения, крути вертел value, пытался всячески прикрутить метод getMonth(), перепробовал все типы переменных) ни к чему он не вяжется, перечёркнутым выходит и пишет деприкейтед.. мол не используется уже чтоли..отчаялся в итоге плюнул, или как-то иначе нужно вытаскивать месяц?
0
IceBergMaster
27 июня 2019, 09:22решение
Учитывая, что курс старый, и здесь иногда просто заставляют работать с устаревшим материалов, то использование деприкейтед методов не должно быть проблемой, это ведь не ошибка, скорее предупреждение, программа должна работать.
+2
hidden #598481
27 июня 2019, 09:30
Как вариант, можешь создать свой календарь GregorianCalendar и передавать ему дату (calendar.setTime(date)). Потом у календаря можно посмотреть текущий месяц: calendar.get(Calendar.MONTH)
Попроще есть вариант создать еще один SimpleDataFormat с шаблоном "M", и форматировать с ним получаемую дату. Такой SDF будет возвращать просто строку, содержащую номер месяца.
0
Александр
27 июня 2019, 09:38
все, сделал просто через гетМонт, спасибо!)
0
Александр
27 июня 2019, 09:50
То есть нужно преобразовать полное значение даты в цифру по шаблону как-бы? Покрутил вот щас, чёто не получается..начал читать на хабре про даты, не пойму если честно как этот дейтФормат работает
0
hidden #598481
27 июня 2019, 10:02полезный
Да на самом деле это штука довольно простая. Я где-то уже подробно расписывал, но закладку потерял.
Короче, он работает так. Задаешь ему в конструкторе шаблон с использованием специальных паттернов, которые в нем есть. А дальше два основных метода - это parse() и format().
parse() принимает в аргументах строку и пытается "прочитать" эту строку как дату по заданному шаблону.
format() принимает в аргументах дату и форматирует по заданному шаблону. То есть например берет дату и смотрит, на какой же месяц она выпадает, возвращает номер месяца в виде строки.
О, нагуглил свой прошлый ответ https://javarush.com/help/13170
+2
Александр
27 июня 2019, 10:18
вот, теперь понял) format()а не хватало для полноты картины) спасибо!
0