#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. Я нашел его. Это было несоответствие. Спасибо!