У меня есть функция, которая должна возвращать список дат (java.sql.Date
) в пределах диапазона, установленного как startDate
- endDate
.Сначала я добавил startDate
и хочу увеличить его (+1 день, неделю или месяц), а затем продолжаю переходить от «самой новой» даты до достижения endDate.
Я пытался использоватьтрадиционный foreach, который не работает, так как не позволяет добавлять новые даты во время итерации, поэтому я переключился на ListIterator
.Это входит в while
только один раз, увеличивает дату, добавляет ее, но затем, очевидно, не имеет next
, потому что функция add
не добавляет элемент в конце (?)
Какой практический способ решить эту задачу?
public List<Date> getBookingDatesInRange(Date startDate, Date endDate, boolean isDaily, boolean isWeekly) {
List<Date> dates = new ArrayList<Date>();
dates.add(startDate);
ListIterator<Date> iter = dates.listIterator();
while(iter.hasNext()) {
LocalDate new = iter.next().toLocalDate();
Date newDate;
if(isDaily) {
newDate= Date.valueOf(new.plusDays(1));
} else if(isWeekly) {
newDate= Date.valueOf(new.plusWeeks(1));
} else {
newDate= Date.valueOf(new.plusMonths(1));
}
if(newDate.before(endDate) || newDate.equals(endDate) {
iter.add(newDate);
} else {
return dates;
}
}