To ensure that the cursor is closed in all cases for any applications using Iterator#forEachRemaining:
@Override
default void forEachRemaining(final Consumer<? super TResult> action) {
try {
Iterator.super.forEachRemaining(action);
} finally {
close();
}
}