Объединение Перекрывающихся Диапазонов Дат-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 ответов
во-первых, если вы заботитесь только о датах (не заботитесь о времени), лучше использовать . Во-вторых, я предполагаю, что у вас есть конструктор задач. Поэтому я использовал следующее