У меня есть ArrayList
из Event
объектов, одно из полей которых равно Map<LocalDateTime, Auditorium> schedule
- представляющих расписание события, т.е. когда и в каких аудиториях оно показывается. Реализация Auditorium
не важна ради вопроса. Я хочу получить список событий, проходящих между определенными датами / временем. Я написал метод, который должен был просматривать набор дат эфирного события каждого события и фильтровать только те события, для которых хотя бы одна дата эфирного графика находится в заданном временном интервале:
public List<Event> getForDateRange(LocalDateTime from, LocalDateTime to) {
events.stream()
.filter(s -> s.getSchedule()
.keySet()
.stream()
.anyMatch(t -> t.compareTo(from) >= 0 && t.compareTo(to) <= 0))
.collect(Collectors.toList());
}
Затем я пытаюсь проверить метод следующим образом:
List<Event> events = new ArrayList<>();
Map<LocalDateTime, Auditorium> schedule = new HashMap<>();
schedule.put(LocalDateTime.of(2019, 4, 20, 18, 30), auditorium);
schedule.put(LocalDateTime.of(2019, 4, 20, 19, 30), auditorium);
schedule.put(LocalDateTime.of(2019, 4, 20, 20, 30), auditorium);
schedule.put(LocalDateTime.of(2019, 4, 20, 21, 30), auditorium);
Event event1 = new Event("Show1", schedule);
events.add(event1);
schedule.clear();
schedule.put(LocalDateTime.of(2019, 4, 20, 16, 30), auditorium);
schedule.put(LocalDateTime.of(2019, 4, 20, 17, 30), auditorium);
Event event2 = new Event("Show2", schedule);
events.add(event2);
schedule.clear();
LocalDateTime from = LocalDateTime.of(2000, 1, 1, 0, 0);
LocalDateTime to = LocalDateTime.of(2019, 4, 20, 20, 40);
List<Event> result = getForDateRange(from, to);
Я ожидал, что result
будет содержать и event1
, и event2
, однако это пустой список. Что не так с логикой метода?
Спасибо.