【发布时间】:2015-11-18 17:13:28
【问题描述】:
我有一个如下所示的 Task 类(使用 Java 8 Time API)。
class Task {
LocalDateTime start;
LocalDateTime end;
Set<String> actionItems;
}
我有两个包含此类任务实例的排序(首先按开始,然后按结束)列表,比如说List<Task> tasksList1 和List<Task> tasksList2。我想组合重叠的任务(通过在需要时中断任务,并将重叠的其他任务中的 actionItems 添加到单个新任务对象中)。
例如,假设我有一个名为 T1 的任务,该任务从 2015 年 1 月 1 日开始,到 2015 年 1 月 31 日结束,其中包含操作项 A 和 B。然后用户创建了一个从 01 开始的新任务 T2 /15/2015 并于 2015 年 2 月 15 日结束,并将操作项 C 添加到其中。当我组合时,我应该得到三个 Task 对象,如下所示。
- 任务 X - 从 01/01/2015 到 01/15/2015,包含操作项 A、B
- 任务 Y - 从 01/15/2015 到 01/31/2015,包含项目 A、B 和 C
- 任务 Z - 从 01/31/2015 到 02/15/2015,包含项目 C
为了形象化,如果我的两个列表中的任务对象在时间轴中如下所示:
> [-----] [-----] [----] [-----------------]
> [-----] [---------------] [------]
然后生成的任务列表将包含以下任务。
> [--][-][--] [-----] [-----][----][--] [-][------][-----]`
重叠任务应该将两个任务的actionItems组合起来,在它们重叠期间重叠。
处理此问题的最有效方法是什么?目前我正在尝试使用 PeekableIterator 的不同选项,但还没有运气。也欢迎任何使用 JodaTime 而不是 Java 8 API 的解决方案。
【问题讨论】:
标签: java algorithm datetime time jodatime