gpt4 book ai didi

java - 在 java 特殊用例的迭代过程中添加项目

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:37:45 28 4
gpt4 key购买 nike

我有一个函数应该返回一个日期列表 (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;
}
}

最佳答案

为什么要基于 Iterator 做 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;
}

关于java - 在 java 特殊用例的迭代过程中添加项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53765910/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com