在java特殊用例中迭代期间添加项目
作者:互联网
我有一个函数应该返回一个日期列表(java.sql.Date)基于设置为startDate – endDate的范围.我首先添加了startDate并想要增加它(1天,一周或一个月),然后继续从“最新”日期开始直到达到endDate.
我尝试使用传统的foreach,因为它不允许在迭代时添加新日期,所以我切换到ListIterator.
这只进入一次,增加日期,添加它但显然没有下一个,因为添加功能不会在最后附加项目(?)
什么是解决这个任务的实用方法?
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;
}
}
解决方法:
为什么要基于迭代器执行while循环?将它基于迭代期间的日期检查是否更合乎逻辑?
public static List<Date> getBookingDatesInRange(Date startDate, Date endDate, boolean isDaily, boolean isWeekly) {
List<Date> dates = new ArrayList<>();
dates.add(startDate);
Date newDate = startDate;
while(newDate.before(endDate) || newDate.equals(endDate)) {
if(isDaily) {
newDate = Date.valueOf(newDate.toLocalDate().plusDays(1));
} else if(isWeekly) {
newDate = Date.valueOf(newDate.toLocalDate().plusWeeks(1));
} else {
newDate = Date.valueOf(newDate.toLocalDate().plusMonths(1));
}
dates.add(newDate);
}
}
return dates;
}
标签:listiterator,java,list,date,iterator 来源: https://codeday.me/bug/20190827/1745595.html