Объединение Перекрывающихся Диапазонов Дат-Java

у меня есть класс, который выглядит следующим образом (используя Java 8 API времени).

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

у меня есть два отсортированных (сначала по началу, а затем по концу) списка, содержащие такие экземпляры задач, скажем List<Task> tasksList1 и List<Task> tasksList2. Я хочу объединить перекрывающиеся задачи (при необходимости разбивая задачи и добавляя actionItems из других задач, которые перекрываются в один новый объект задачи).

например, предположим, что у меня есть задача T1, которая начинается с 01/01/2015 и заканчивается на 01/31/2015, который содержит элементы действий A и B. Затем пользователь создает новую задачу T2, которая начинается с 01/15/2015 и заканчивается 02/15/2015, и добавляет в нее элемент действия C. Когда я объединяю, я должен получить три объекта задачи следующим образом.

  • задача X-с 01.01.2015 по 15.01.2015 содержит элементы действий A, B
  • задача Y-с 15.01.2015 по 31.01.2015, содержит пункты A,B и c
  • задача Z-от 01/31/2015 до 02/15/2015, содержит пункт C

визуализировать, если мой объект задачи из двух списков выглядит следующим образом на временной шкале:

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

тогда результирующий список задач будет содержать следующие задачи.

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

перекрывающиеся задачи должны иметь actionItems объединены из обеих задач, которые перекрываются в течение периода, в котором они перекрываются.

какой самый эффективный способ справиться с этим? На данный момент я пробую разные варианты с PeekableIterator, но пока не повезло. Любые решения, использующие Jodatime вместо API Java 8, также приветствуются.

1 ответов


во-первых, если вы заботитесь только о датах (не заботитесь о времени), лучше использовать . Во-вторых, я предполагаю, что у вас есть конструктор задач. Поэтому я использовал следующее