class RecordingSubListIterator extends SelectionIterator<SubList> {

        private final Iterator<SubList> childSubListIterator;

        public RecordingSubListIterator(Iterator<SubList> childSubListIterator) {
            this.childSubListIterator = childSubListIterator;
        }

        @Override
        public boolean hasNext() {
            boolean hasNext = childSubListIterator.hasNext();
            for (MimicReplayingSubListSelector<Solution_> replayingValueSelector : replayingSubListSelectorList) {
                replayingValueSelector.recordedHasNext(hasNext);
            }
            return hasNext;
        }

        @Override
        public SubList next() {<FILL_FUNCTION_BODY>}

    }

            SubList next = childSubListIterator.next();
            for (MimicReplayingSubListSelector<Solution_> replayingValueSelector : replayingSubListSelectorList) {
                replayingValueSelector.recordedNext(next);
            }
            return next;
        
<methods>public non-sealed void <init>() ,public org.optaplanner.core.config.heuristic.selector.common.SelectionCacheType getCacheType() ,public void phaseEnded(AbstractPhaseScope<Solution_>) ,public void phaseStarted(AbstractPhaseScope<Solution_>) ,public void solvingEnded(SolverScope<Solution_>) ,public void solvingStarted(SolverScope<Solution_>) ,public void stepEnded(AbstractStepScope<Solution_>) ,public void stepStarted(AbstractStepScope<Solution_>) <variables>protected final transient Logger logger,protected PhaseLifecycleSupport<Solution_> phaseLifecycleSupport,protected java.util.Random workingRandom