我的任务列表如下所示:
public Task(String content, Date start, Date end, String group, String title) {
this.content = content;
this.start = start;
this.end = end;
this.group = group;
this.title = title;
}
现在,我想创建第二个列表,其中包含按日期分组的具有相同组和标题的所有任务。这意味着,如果多个任务以任何方式重叠,我希望一个任务对应多个任务,例如,一个任务开始于另一个任务,但结束较晚,等等。我想修改新元素并调整其结束日期。
我试过遍历一个按开始日期排序的列表,并比较所有后续任务,但没有成功。我觉得自己很蠢,希望能得到任何帮助。
谢谢您
2条答案
按热度按时间bvjveswy1#
我首先假设你已经创建了一个小列表
group
以及name
字段是相同的。要做到这一点,一个简单的方法是使用两个键的字典或Map:对于每个内部列表,您需要将其减少为不重叠的条目。想象一下,您的范围列表可以表示为如下所示:
这看起来一团糟,但是,如果我们按开始时间排序会发生什么?
很明显,这里有三个独立的部分:
要执行此缩减,您可以遍历排序的列表,并在发现列表中的间隙时向结果列表添加新值。通过获取组的最早开始时间和最晚结束时间来创建新范围。我在github上找到了一个zac xin的例子,它就是这样做的(在这里
intervals
是一个排序的Interval
对象)一旦您对Map中的每个小列表进行了排序,就可以将它们全部合并到一个列表中。
shstlldc2#
这似乎是关系数据库的典型场景。我认为最好在数据库的帮助下实现它,例如使用sqlite。
在面向对象的环境中这样做也是可能的,但是使用数据库要容易得多。:)