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