Java中的相交重叠间隔

u6f*_*f6o 5 java intersection intervals

我有一组可能重叠的日期范围输入。我想创建具有调整日期的新日期范围,而不是组合这些重叠的日期范围,例如:

|---------------------–|
        |-----| 
            |--------------–|
Run Code Online (Sandbox Code Playgroud)

最终应该是:

|-------|---|-|--------|----|
Run Code Online (Sandbox Code Playgroud)

有没有一种有效的方法可以用 Java 解决这个问题?

提前致谢!

更新: 我没有在我的第一个问题中提到我自己的方法,所以这里是:我只是简单地取一个时间间隔的开始和结束日期并将其添加到一个排序集中。之后,我会遍历该集合并根据重新排序的日期创建新的间隔。

ssi*_*lar 6

您可以使用Guava 的 Range支持。尚未将其与 Date 对象一起使用,但它可以工作。与RangeSet结合,您可以添加所有日期范围,然后检查日期是否在范围内,获取完整范围等。


Duk*_*ing 6

基本思想:

  • 将每个间隔分为起点和终点
  • 对点进行排序
  • 迭代这些点并在所有相邻点之间创建新的间隔。
    跟踪startIntervals - endIntervals并每当该数字为 0 时,该范围内就不应该有间隔。


izo*_*ica 4

要解决此类问题,请使用开始日期作为第一个条件、结束日期作为第二个条件对时间间隔进行排序。这样您就可以在一次迭代中交叉间隔。如果您的间隔与另一个刚开始的间隔重叠,则按排序顺序其后继间隔应该是重叠间隔,依此类推。