检查一个列表的间隔是不是与另一个列表的间隔重叠

Posted

技术标签:

【中文标题】检查一个列表的间隔是不是与另一个列表的间隔重叠【英文标题】:Check if the Intervals of a list are overlaped with the Intervals of another list检查一个列表的间隔是否与另一个列表的间隔重叠 【发布时间】:2021-09-08 22:59:44 【问题描述】:

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

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

【讨论】:

@DimitrisTsarouhas 哎呀,我的错。您应该使用allMatch 而不是anyMatch,并检查重叠是否等于null。查看我编辑的答案 我找到了。这是无匹配的。谢谢!

以上是关于检查一个列表的间隔是不是与另一个列表的间隔重叠的主要内容,如果未能解决你的问题,请参考以下文章

用给定的间隔覆盖所有数字的贪婪尝试

区间树中的最大非重叠区间

检查重叠的间隔开始和结束时间

如何检查它是不是是python中的新一天?

允许在边界重叠的排除约束

面试题——递增间隔分割列表