# QueryResultSlicer.java

    package org.codefilarete.stalactite.spring.repository.query.execution.reduce;

    import java.util.List;
    import java.util.function.Function;
    import java.util.function.Supplier;

    import org.codefilarete.stalactite.spring.repository.query.StalactiteRepositoryQuery;
    import org.springframework.data.domain.Slice;

    public class QueryResultSlicer<C, R, I> implements QueryResultReducer<Slice<R>, I> {

    	private final StalactiteRepositoryQuery<C, ?> delegate;
    	private final LimitHandler limitHandler;

    	public QueryResultSlicer(StalactiteRepositoryQuery<C, ?> delegate, LimitHandler limitHandler) {
    		this.delegate = delegate;
    		this.limitHandler = limitHandler;
    	}

    	@Override
    	public Function<Object[], Slice<R>> adapt(Supplier<List<I>> resultSupplier) {
    		return new SliceResultWindower<C, Slice<R>, I>(delegate, limitHandler, resultSupplier)::adaptExecution;
    	}

    }