首页 > 解决方案 > 检查一个列表的间隔是否与另一个列表的间隔重叠

问题描述

我有两个带有间隔的列表,即

[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....]

我想检查第一个元素是否与第二个元素重叠。如果没有重叠,我需要一个列表,其中包含与第一个列表不重叠的间隔。

标签: javajava-streamjodatimeintervals

解决方案


本质上,您需要遍历第一个列表,然后为每个项目遍历第二个列表并检查是否有任何间隔与其重叠。流使这更优雅:

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());

推荐阅读