【问题标题】: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....]

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

【问题讨论】:

    标签: java java-stream jodatime intervals


    【解决方案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。查看我编辑的答案
    • 我找到了。这是无匹配的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    相关资源
    最近更新 更多