@Override public Interval next() { if (!hasNext()) { throw new NoSuchElementException(); } position += 1; DateTime nextPosition = ObjectUtils.min(intervalEnd, boundaryAt(position)); Interval result = new Interval(currentPosition, nextPosition); currentPosition = nextPosition; return result; }