operator fun ClosedRange<LocalDate>.iterator() : Iterator<LocalDate>{
return object: Iterator<LocalDate> {
private var next = this@iterator.start
private val finalElement = this@iterator.endInclusive
private var hasNext = !next.isAfter(this@iterator.endInclusive)
override fun hasNext(): Boolean = hasNext
override fun next(): LocalDate { val value = next if(value == finalElement) { hasNext = false } else { next = next.plusDays(1)
} return value
}
}
}
No one stops you from implementing your own LocalDateProgression : Iterable<LocalDate> and providing extension function step for ClosedRange<LocalDate> returning that progression:
fun ClosedRange<LocalDate>.step(step: TemporalAmount): LocalDateProgression = ...