Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- import java.util.stream.Collectors;
- import java.time.LocalDateTime;
- import java.time.format.DateTimeFormatter;
- import java.util.Scanner;
- import java.util.Comparator;
- import java.util.*;
- public class EventCalendarTest {
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- int n = scanner.nextInt();
- scanner.nextLine();
- int year = scanner.nextInt();
- scanner.nextLine();
- EventCalendar eventCalendar = new EventCalendar(year);
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm");
- for (int i = 0; i < n; ++i) {
- String line = scanner.nextLine();
- String[] parts = line.split(";");
- String name = parts[0];
- String location = parts[1];
- LocalDateTime date = LocalDateTime.parse(parts[2], formatter);
- try {
- eventCalendar.addEvent(name, location, date);
- } catch (WrongDateException e) {
- System.out.println(e.getMessage());
- }
- }
- LocalDateTime date = LocalDateTime.parse(scanner.nextLine(), formatter);
- eventCalendar.listEvents(date);
- eventCalendar.listByMonth();
- }
- }
- class WrongDateException extends Exception{
- public WrongDateException(LocalDateTime date) {
- super(String.format("Wrong date: %s",date));
- }
- }
- class EventCalendar {
- List<Event> events;
- int year;
- public EventCalendar(int year) {
- events = new ArrayList<>();
- this.year=year;
- }
- public void addEvent(String name, String location, LocalDateTime date) throws WrongDateException {
- if(date.getYear()!=year)
- throw new WrongDateException(date);
- events.add(new Event(name,location,date));
- }
- public void listEvents(LocalDateTime date) {
- events.stream().sorted().filter(i->i.getDate().getDayOfYear()==date.getDayOfYear())
- .forEach(System.out::println);
- }
- public void listByMonth() {
- Map<Integer,Long> eventsByMonth = events.stream().collect(Collectors.groupingBy(
- Event::getMonth,
- TreeMap::new,
- Collectors.counting()
- ));
- for(int i=1;i<=12;i++){
- eventsByMonth.putIfAbsent(i,0L);
- }
- for(Integer i : eventsByMonth.keySet()){
- System.out.println(String.format("%d : %d",i,eventsByMonth.get(i)));
- }
- }
- }
- class Event implements Comparable<Event>{
- String name;
- String location;
- LocalDateTime date;
- public Event(String name, String location, LocalDateTime date) {
- this.name = name;
- this.location = location;
- this.date = date;
- }
- public String getName() {
- return name;
- }
- public String getLocation() {
- return location;
- }
- public LocalDateTime getDate() {
- return date;
- }
- public int getMonth(){
- return getDate().getMonth().getValue();
- }
- public String getThreeChars(String month){
- return month.substring(0,1)+month.substring(1,3).toLowerCase();
- }
- @Override
- public String toString() {
- return String.format("%d %s, %d %02d:%02d at %s, %s",getDate().getDayOfMonth(),getThreeChars(getDate().getMonth().toString()),
- getDate().getYear(),getDate().getHour(),getDate().getMinute(),getLocation(),getName());
- }
- @Override
- public int compareTo(Event o) {
- return Comparator.comparing(Event::getDate)
- .thenComparing(Event::getName)
- .compare(this,o);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement