SortedIterator(final Function<E, K> keyResolver, final List<K> ids, final PagingIterator<E, K> delegate) { // the list resolver closes the iterator for us final List<E> list = new ArrayList<>(new CloseableIterator.ListResolver<E>().get(delegate)); Collections.sort(list, new ResolvingComparator<>(keyResolver, new ListOrderComparator<>(ids))); it = list.iterator(); }