From 4d2cc9ab8ee6c3438490a6c2eb073dd58dc0c9f9 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 12 Jul 2017 10:54:01 +0200 Subject: [PATCH] DATACMNS-1110 - Introduced StreamUtils.createStreamFromIterator(CloseableIterator). This is an overload for the already existing method taking a plain Iterator so that we only apply the close callback to the Stream in the newly introduced one. --- .../data/util/StreamUtils.java | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/springframework/data/util/StreamUtils.java b/src/main/java/org/springframework/data/util/StreamUtils.java index fa8d708d2..b1cfc8944 100644 --- a/src/main/java/org/springframework/data/util/StreamUtils.java +++ b/src/main/java/org/springframework/data/util/StreamUtils.java @@ -41,25 +41,30 @@ import org.springframework.util.MultiValueMap; public interface StreamUtils { /** - * Returns a {@link Stream} backed by the given {@link Iterator}. - *

- * If the given iterator is an {@link CloseableIterator} add a {@link CloseableIteratorDisposingRunnable} wrapping the - * given iterator to propagate {@link Stream#close()} accordingly. + * Returns a {@link Stream} backed by the given {@link Iterator} * - * @param iterator must not be {@literal null} + * @param iterator must not be {@literal null}. * @return - * @since 1.8 */ public static Stream createStreamFromIterator(Iterator iterator) { + Spliterator spliterator = Spliterators.spliteratorUnknownSize(iterator, Spliterator.NONNULL); + return StreamSupport.stream(spliterator, false); + } + + /** + * Returns a {@link Stream} backed by the given {@link CloseableIterator} and forwarding calls to + * {@link Stream#close()} to the iterator. + * + * @param iterator must not be {@literal null}. + * @return + * @since 2.0 + */ + public static Stream createStreamFromIterator(CloseableIterator iterator) { + Assert.notNull(iterator, "Iterator must not be null!"); - Spliterator spliterator = Spliterators.spliteratorUnknownSize(iterator, Spliterator.NONNULL); - Stream stream = StreamSupport.stream(spliterator, false); - - return iterator instanceof CloseableIterator// - ? stream.onClose(() -> ((CloseableIterator) iterator).close()) // - : stream; + return createStreamFromIterator((Iterator) iterator).onClose(() -> iterator.close()); } /**