Ran*_*ame 3 java iterator date list listiterator
我有一个函数,应该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;
}
}
Run Code Online (Sandbox Code Playgroud)
为什么要基于迭代器进行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;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
62 次 |
最近记录: |