假设您主要想在日期范围内进行迭代,那么创建一个
DateRange可迭代的类将很有意义。那可以让你写:
for (LocalDate d : DateRange.between(startDate, endDate)) ...
就像是:
public class DateRange implements Iterable<LocalDate> { private final LocalDate startDate; private final LocalDate endDate; public DateRange(LocalDate startDate, LocalDate endDate) { //check that range is valid (null, start < end) this.startDate = startDate; this.endDate = endDate; } @Override public Iterator<LocalDate> iterator() { return stream().iterator(); } public Stream<LocalDate> stream() { return Stream.iterate(startDate, d -> d.plusDays(1)) .limit(ChronoUnit.DAYS.between(startDate, endDate) + 1); } public List<LocalDate> toList() { //could also be built from the stream() method List<LocalDate> dates = new ArrayList<> (); for (LocalDate d = startDate; !d.isAfter(endDate); d = d.plusDays(1)) { dates.add(d); } return dates; }}添加equals和hashpre方法,getter可能很有意义,也许有一个静态工厂+私有构造函数来匹配Java time API的编码样式等。



