Проверьте, не перекрываются ли интервалы списка с интервалами другого списка

#java #java-stream #jodatime #intervals

Вопрос:

У меня есть два списка с интервалами, т. Е.

[2021-06-29T00:00:00.000 03:00/2021-06-30T23:59:00.000 03:00, 2021-07-01T00:00:00.000 03:00/2021-07-06T23:59:00.000 03:00]

[2021-06-25T00:00:00.000 03:00/2021-06-30T23:59:59.000 03:00, 2021-07-01T00:00:00.000 03:00/2021-07-06T23:59:59.000 03:00, 2021-07-06T00:00:00.000 03:00/2021-07-11T23:59:59.000 03:00, 2021-07-11T00:00:00.000 03:00/2021-07-16T23:59:59.000 03:00....]

Я хочу проверить, перекрываются ли элементы первого с элементами второго или нет. В случае, если нет перекрытия, мне нужен список с интервалами, чтобы они не перекрывались с первым списком.

Ответ №1:

По сути, вы хотели бы просмотреть первый список, а для каждого элемента просмотрите второй список и проверьте, не перекрывает ли его какой-либо интервал. Потоки делают это немного более элегантным:

 List<Interval> list1 = // some intervals...
List<Interval> list2 = // some more internvals...
List<Interval> result = 
    list1.stream()
         .filter(i1 -> list2.stream().allMatch(i2 -> i1.overlap(i2) == null))
         .collect(Collectors.toList());
 

Комментарии:

1. @DimitrisTsarouhas ой, моя ошибка. Вы должны использовать allMatch вместо anyMatch и проверить, равно ли перекрытие null . Смотрите мой отредактированный ответ

2. Я нашел его. Это было несоответствие. Спасибо!