结合重叠日期范围 - Java

时间:2015-08-25 05:59:16

标签: java algorithm datetime time jodatime

我有一个Task类,如下所示(使用Java 8 Time API)。

class Task {
    LocalDateTime start;
    LocalDateTime end;
    Set<String> actionItems;
}

我有两个排序(首先是开头,然后是结尾)包含此类任务实例的列表,比方说List<Task> tasksList1List<Task> tasksList2。我想组合重叠的任务(通过在需要时断开任务,并从重叠到单个新任务对象的其他任务中添加actionItem)。

例如,假设我有一个名为T1的任务,从2015年1月1日开始,到2015年1月31日结束,其中包含操作项A和B.然后用户创建一个从01开始的新任务T2 / 15/2015,于2015年2月15日结束,并将行动项目C添加到其中。当我合并时,我应该得到三个Task对象,如下所示。

  • 任务X - 从2015年1月1日到2015年1月15日,包含操作项A,B
  • 任务Y - 2015年1月15日至2015年1月31日,包含项目A,B和C
  • 任务Z - 从2015年1月31日到2015年2月15日,包含项目C

要进行可视化,如果两个列表中的任务对象在时间轴中如下所示:

> [-----]      [-----]         [----]         [-----------------]
>     [-----]           [---------------]         [------]

然后生成的任务列表将包含如下任务。

> [--][-][--]  [-----]  [-----][----][--]      [-][------][-----]`

重叠任务应该将actionItems组合在两个重叠期间重叠的任务中。

处理此问题的最有效方法是什么?目前我正在尝试使用PeekableIterator的不同选项,但还没有运气。任何使用JodaTime而不是Java 8 API的解决方案也是受欢迎的。

0 个答案:

没有答案