TGViewer
Java Ready | Программирование Java Ready | Программирование @java_ready · 9.32K subscribers
Post #2263 361
Проверяем пересечение бронирований на Java!

В календаре нужно отклонить новую бронь, если выбранное время уже занято. Для проверки достаточно сравнить начало и конец двух интервалов, не перебирая каждую минуту внутри них.

Сделаем модель с полуоткрытым интервалом, где начало включается, а конец уже свободен:
record Booking(LocalDateTime start, LocalDateTime end) {
    Booking {
        if (!start.isBefore(end)) {
            throw new IllegalArgumentException("End must be after start");
        }
    }

boolean overlaps(Booking other) {
        return start.isBefore(other.end())
            && other.start().isBefore(end);
    }
}


Проверка не даст создать бронь нулевой или отрицательной длины. Условие пересечения учитывает обе границы и не считает соседние интервалы конфликтом.

Подготовим уже занятые промежутки и новый запрос:
List<Booking> existing = List.of(
    new Booking(start1, end1),
    new Booking(start2, end2)
);
Booking requested = new Booking(requestStart, requestEnd);


Здесь предполагается, что все значения уже приведены к одной временной зоне. Для расписания в нескольких регионах лучше сравнивать Instant, а исходный ZoneId сохранять отдельно.

Проверим весь список и получим понятный результат:
boolean conflict = existing.stream()
    .anyMatch(booking -> booking.overlaps(requested));


anyMatch завершает проверку, как только найдёт первое пересечение. Если conflict равен false, новую бронь можно добавить, а интервалы, которые соприкасаются ровно по границе, останутся допустимыми.

👉 Java Ready | #практика
  • ❤ 2
  • 👍 2
  • 🔥 1
More from @java_ready
  1. Oct 17, 2026Ищем новичков во frontend-разработке и вёрстке сайтов. Айтилогия запускает бесплатное обуч…
  2. Oct 17, 2026Шпаргалка по выбору типа даты и времени в Java! Для календарного интервала вроде срока под…
  3. Oct 16, 2026Проверяем подпись webhook через HMAC в Java! Webhook нельзя считать доверенным только пото…
  4. Oct 15, 2026Знали, что Map.getOrDefault может вызвать загрузку, даже когда ключ уже есть? Java сначала…
  5. Oct 15, 2026⚡️ В сети начали массово сливать IT-курсы и книги известных онлайн школ Вот отсортированна…
  6. Oct 15, 2026Шпаргалка по загрузчикам классов в Java! На картинке показаны Bootstrap, Platform, Applica…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →