From d58502ad76b833692504f56bf98debaaad77d539 Mon Sep 17 00:00:00 2001 From: huangchengxing <841396397@qq.com> Date: Tue, 6 Sep 2022 13:32:32 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=96=B9=E6=B3=95=E5=90=8D?= =?UTF-8?q?=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stream/AbstractEnhancedWrappedStream.java | 6 +- .../cn/hutool/core/stream/CollectorUtil.java | 2 +- .../cn/hutool/core/stream/EasyStream.java | 8 +- .../cn/hutool/core/stream/EntryStream.java | 26 +++--- .../core/stream/TerminableWrappedStream.java | 38 ++++---- .../stream/TransformableWrappedStream.java | 44 ++++----- .../cn/hutool/core/stream/WrappedStream.java | 93 ++++++++++--------- .../AbstractEnhancedWrappedStreamTest.java | 8 +- 8 files changed, 113 insertions(+), 112 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/stream/AbstractEnhancedWrappedStream.java b/hutool-core/src/main/java/cn/hutool/core/stream/AbstractEnhancedWrappedStream.java index aed748389..25e4bc2b3 100644 --- a/hutool-core/src/main/java/cn/hutool/core/stream/AbstractEnhancedWrappedStream.java +++ b/hutool-core/src/main/java/cn/hutool/core/stream/AbstractEnhancedWrappedStream.java @@ -25,7 +25,7 @@ public abstract class AbstractEnhancedWrappedStream stream() { + public Stream unwrap() { return stream; } @@ -33,10 +33,10 @@ public abstract class AbstractEnhancedWrappedStream stream) { - this.stream = Objects.requireNonNull(stream, "stream must not null"); + this.stream = Objects.requireNonNull(stream, "unwrap must not null"); } /** diff --git a/hutool-core/src/main/java/cn/hutool/core/stream/CollectorUtil.java b/hutool-core/src/main/java/cn/hutool/core/stream/CollectorUtil.java index 7ec8c70c2..0899a63e6 100644 --- a/hutool-core/src/main/java/cn/hutool/core/stream/CollectorUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/stream/CollectorUtil.java @@ -102,7 +102,7 @@ public class CollectorUtil { final K key = Opt.ofNullable(t).map(classifier).orElse(null); final A container = m.computeIfAbsent(key, k -> downstreamSupplier.get()); if (ArrayUtil.isArray(container) || Objects.nonNull(t)) { - // 如果是数组类型,不需要判空,场景——分组后需要使用:java.util.stream.Collectors.counting 求null元素个数 + // 如果是数组类型,不需要判空,场景——分组后需要使用:java.util.unwrap.Collectors.counting 求null元素个数 downstreamAccumulator.accept(container, t); } }; diff --git a/hutool-core/src/main/java/cn/hutool/core/stream/EasyStream.java b/hutool-core/src/main/java/cn/hutool/core/stream/EasyStream.java index 1603788d7..0d5b22f14 100644 --- a/hutool-core/src/main/java/cn/hutool/core/stream/EasyStream.java +++ b/hutool-core/src/main/java/cn/hutool/core/stream/EasyStream.java @@ -15,7 +15,7 @@ import java.util.stream.StreamSupport; /** *

单元素的扩展流实现。基于原生Stream进行了封装和增强。
- * 作者经对比了vavr、eclipse-collection、stream-ex以及其他语言的api,结合日常使用习惯,进行封装和拓展 + * 作者经对比了vavr、eclipse-collection、unwrap-ex以及其他语言的api,结合日常使用习惯,进行封装和拓展 * Stream为集合提供了一些易用api,它让开发人员能使用声明式编程的方式去编写代码。 * *

中间操作和结束操作

@@ -67,7 +67,7 @@ public class EasyStream extends AbstractEnhancedWrappedStream 元素的类型 - * @return a stream builder + * @return a unwrap builder */ public static Builder builder() { return new Builder() { @@ -262,7 +262,7 @@ public class EasyStream extends AbstractEnhancedWrappedStream wrapping(final Stream stream) { + public EasyStream wrap(final Stream stream) { return new EasyStream<>(stream); } @@ -359,7 +359,7 @@ public class EasyStream extends AbstractEnhancedWrappedStream extends Consumer, cn.hutool.core.builder.Builder> { /** - * Adds an element to the stream being built. + * Adds an element to the unwrap being built. * * @param t the element to add * @return {@code this} builder diff --git a/hutool-core/src/main/java/cn/hutool/core/stream/EntryStream.java b/hutool-core/src/main/java/cn/hutool/core/stream/EntryStream.java index 322379071..47c7ba24e 100644 --- a/hutool-core/src/main/java/cn/hutool/core/stream/EntryStream.java +++ b/hutool-core/src/main/java/cn/hutool/core/stream/EntryStream.java @@ -159,7 +159,7 @@ public class EntryStream extends AbstractEnhancedWrappedStream distinctByKey() { // FIXME fix happen NPE when has null key final Set accessed = new ConcurrentHashSet<>(16); - return wrapping(stream.filter(e -> { + return wrap(stream.filter(e -> { final K key = e.getKey(); if (accessed.contains(key)) { return false; @@ -177,7 +177,7 @@ public class EntryStream extends AbstractEnhancedWrappedStream distinctByValue() { // FIXME fix happen NPE when has null value final Set accessed = new ConcurrentHashSet<>(16); - return wrapping(stream.filter(e -> { + return wrap(stream.filter(e -> { final V val = e.getValue(); if (accessed.contains(val)) { return false; @@ -301,7 +301,7 @@ public class EntryStream extends AbstractEnhancedWrappedStream push(final K key, final V value) { - return wrapping(Stream.concat(stream, Stream.of(ofEntry(key, value)))); + return wrap(Stream.concat(stream, Stream.of(ofEntry(key, value)))); } /** @@ -312,7 +312,7 @@ public class EntryStream extends AbstractEnhancedWrappedStream unshift(final K key, final V value) { - return wrapping(Stream.concat(Stream.of(ofEntry(key, value)), stream)); + return wrap(Stream.concat(Stream.of(ofEntry(key, value)), stream)); } /** @@ -328,7 +328,7 @@ public class EntryStream extends AbstractEnhancedWrappedStream> contacted = StreamSupport.stream(entries.spliterator(), isParallel()) .map(EntryStream::ofEntry); - return wrapping(Stream.concat(stream, contacted)); + return wrap(Stream.concat(stream, contacted)); } /** @@ -344,7 +344,7 @@ public class EntryStream extends AbstractEnhancedWrappedStream> contacted = StreamSupport.stream(entries.spliterator(), isParallel()) .map(EntryStream::ofEntry); - return wrapping(Stream.concat(contacted, stream)); + return wrap(Stream.concat(contacted, stream)); } /** @@ -442,9 +442,9 @@ public class EntryStream extends AbstractEnhancedWrappedStream * 效果类似: *
{@code
-	 * // stream = [{a = 1}, {b = 2}, {c = 3}]
-	 * stream.flatMapKey(key -> Stream.of(key + "1", key + "2"));
-	 * // stream = [{a1 = 1}, {a2 = 1}, {b1 = 2}, {b2 = 2}, {c1 = 3}, {c2 = 3}]
+	 * // unwrap = [{a = 1}, {b = 2}, {c = 3}]
+	 * unwrap.flatMapKey(key -> Stream.of(key + "1", key + "2"));
+	 * // unwrap = [{a1 = 1}, {a2 = 1}, {b1 = 2}, {b2 = 2}, {c1 = 3}, {c2 = 3}]
 	 * }
* * @param keyMapper 值转映射方法 @@ -466,9 +466,9 @@ public class EntryStream extends AbstractEnhancedWrappedStream * 效果类似: *
{@code
-	 * // stream = [{a = 1}, {b = 2}, {c = 3}]
-	 * stream.flatMapValue(num -> Stream.of(num, num+1));
-	 * // stream = [{a = 1}, {a = 2}, {b = 2}, {b = 3}, {c = 3}, {c = 4}]
+	 * // unwrap = [{a = 1}, {b = 2}, {c = 3}]
+	 * unwrap.flatMapValue(num -> Stream.of(num, num+1));
+	 * // unwrap = [{a = 1}, {a = 2}, {b = 2}, {b = 3}, {c = 3}, {c = 4}]
 	 * }
* * @param valueMapper 值转映射方法 @@ -755,7 +755,7 @@ public class EntryStream extends AbstractEnhancedWrappedStream wrapping(final Stream> stream) { + public EntryStream wrap(final Stream> stream) { return new EntryStream<>(stream); } diff --git a/hutool-core/src/main/java/cn/hutool/core/stream/TerminableWrappedStream.java b/hutool-core/src/main/java/cn/hutool/core/stream/TerminableWrappedStream.java index 96923cd94..4439d73d5 100644 --- a/hutool-core/src/main/java/cn/hutool/core/stream/TerminableWrappedStream.java +++ b/hutool-core/src/main/java/cn/hutool/core/stream/TerminableWrappedStream.java @@ -73,7 +73,7 @@ public interface TerminableWrappedStream> C toColl(final Supplier collectionFactory) { Objects.requireNonNull(collectionFactory); - return stream().collect(Collectors.toCollection(collectionFactory)); + return unwrap().collect(Collectors.toCollection(collectionFactory)); } // endregion @@ -181,7 +181,7 @@ public interface TerminableWrappedStream Optional transform(final Function transform) { Objects.requireNonNull(transform); - return Optional.ofNullable(transform.apply(wrapping(this))); + return Optional.ofNullable(transform.apply(wrap(this))); } /** @@ -238,7 +238,7 @@ public interface TerminableWrappedStream findFirst(final Predicate predicate) { Objects.requireNonNull(predicate); - return stream().filter(predicate).findFirst(); + return unwrap().filter(predicate).findFirst(); } /** @@ -253,7 +253,7 @@ public interface TerminableWrappedStream { + unwrap().filter(e -> { index.increment(); return predicate.test(e); }).findFirst(); @@ -377,7 +377,7 @@ public interface TerminableWrappedStream> partitioning(final Predicate predicate) { - return this.partitioning(predicate, ArrayList::new); + default Map> partition(final Predicate predicate) { + return this.partition(predicate, ArrayList::new); } /** @@ -452,10 +452,10 @@ public interface TerminableWrappedStream> Map partitioning(final Predicate predicate, final Supplier collFactory) { - return this.partitioning(predicate, Collectors.toCollection(collFactory)); + default > Map partition(final Predicate predicate, final Supplier collFactory) { + return this.partition(predicate, Collectors.toCollection(collFactory)); } /** @@ -466,10 +466,10 @@ public interface TerminableWrappedStream 返回值类型 * @return map */ - default Map partitioning(final Predicate predicate, final Collector downstream) { + default Map partition(final Predicate predicate, final Collector downstream) { Objects.requireNonNull(predicate); Objects.requireNonNull(downstream); - return stream().collect(Collectors.partitioningBy(predicate, downstream)); + return unwrap().collect(Collectors.partitioningBy(predicate, downstream)); } // endregion @@ -485,10 +485,10 @@ public interface TerminableWrappedStream action) { Objects.requireNonNull(action); if (isParallel()) { - stream().forEach(e -> action.accept(e, NOT_FOUND_ELEMENT_INDEX)); + unwrap().forEach(e -> action.accept(e, NOT_FOUND_ELEMENT_INDEX)); } else { final MutableInt index = new MutableInt(NOT_FOUND_ELEMENT_INDEX); - stream().forEach(e -> action.accept(e, index.incrementAndGet())); + unwrap().forEach(e -> action.accept(e, index.incrementAndGet())); } } @@ -501,10 +501,10 @@ public interface TerminableWrappedStream action) { Objects.requireNonNull(action); if (isParallel()) { - stream().forEachOrdered(e -> action.accept(e, NOT_FOUND_ELEMENT_INDEX)); + unwrap().forEachOrdered(e -> action.accept(e, NOT_FOUND_ELEMENT_INDEX)); } else { final MutableInt index = new MutableInt(NOT_FOUND_ELEMENT_INDEX); - stream().forEachOrdered(e -> action.accept(e, index.incrementAndGet())); + unwrap().forEachOrdered(e -> action.accept(e, index.incrementAndGet())); } } diff --git a/hutool-core/src/main/java/cn/hutool/core/stream/TransformableWrappedStream.java b/hutool-core/src/main/java/cn/hutool/core/stream/TransformableWrappedStream.java index f26357e42..b689db3fa 100644 --- a/hutool-core/src/main/java/cn/hutool/core/stream/TransformableWrappedStream.java +++ b/hutool-core/src/main/java/cn/hutool/core/stream/TransformableWrappedStream.java @@ -57,7 +57,7 @@ public interface TransformableWrappedStream i < size, i -> i + batchSize) .map(skip -> EasyStream.of(list.subList(skip, Math.min(size, skip + batchSize)), isParallel())) .parallel(isParallel()) - .onClose(stream()::close); + .onClose(unwrap()::close); } /** @@ -133,7 +133,7 @@ public interface TransformableWrappedStream elements = stream().collect(Collectors.toList()); - return wrapping(ListUtil.splice(elements, start, deleteCount, items).stream()) + final List elements = unwrap().collect(Collectors.toList()); + return wrap(ListUtil.splice(elements, start, deleteCount, items).stream()) .parallel(isParallel()); } @@ -187,7 +187,7 @@ public interface TransformableWrappedStream predicate) { Objects.requireNonNull(predicate); - return wrapping(StreamUtil.takeWhile(stream(), predicate)); + return wrap(StreamUtil.takeWhile(unwrap(), predicate)); } /** @@ -216,7 +216,7 @@ public interface TransformableWrappedStream predicate) { Objects.requireNonNull(predicate); - return wrapping(StreamUtil.dropWhile(stream(), predicate)); + return wrap(StreamUtil.dropWhile(unwrap(), predicate)); } /** @@ -234,7 +234,7 @@ public interface TransformableWrappedStream { + return EasyStream.of(unwrap().filter(e -> { final F key = keyExtractor.apply(e); if (key == null) { // 已经出现过null值,跳过该值 @@ -250,7 +250,7 @@ public interface TransformableWrappedStream exists = new HashSet<>(); - return EasyStream.of(stream().filter(e -> exists.add(keyExtractor.apply(e)))); + return EasyStream.of(unwrap().filter(e -> exists.add(keyExtractor.apply(e)))); } } @@ -305,11 +305,11 @@ public interface TransformableWrappedStream result = stream(); + Stream result = unwrap(); if (ArrayUtil.isNotEmpty(obj)) { - result = Stream.concat(stream(), Stream.of(obj)); + result = Stream.concat(unwrap(), Stream.of(obj)); } - return wrapping(result); + return wrap(result); } /** @@ -319,11 +319,11 @@ public interface TransformableWrappedStream result = stream(); + Stream result = unwrap(); if (ArrayUtil.isNotEmpty(obj)) { - result = Stream.concat(Stream.of(obj), stream()); + result = Stream.concat(Stream.of(obj), unwrap()); } - return wrapping(result); + return wrap(result); } /** @@ -334,10 +334,10 @@ public interface TransformableWrappedStream iterable) { if (IterUtil.isEmpty(iterable)) { - return wrapping(this); + return wrap(this); } final Stream contacted = StreamSupport.stream(iterable.spliterator(), isParallel()); - return wrapping(Stream.concat(this, contacted)); + return wrap(Stream.concat(this, contacted)); } /** @@ -348,10 +348,10 @@ public interface TransformableWrappedStream iterable) { if (IterUtil.isEmpty(iterable)) { - return wrapping(this); + return wrap(this); } final Stream contacted = StreamSupport.stream(iterable.spliterator(), isParallel()); - return wrapping(Stream.concat(contacted, this)); + return wrap(Stream.concat(contacted, this)); } // endregion @@ -417,7 +417,7 @@ public interface TransformableWrappedStream EasyStream flatMap(final Function> mapper) { Objects.requireNonNull(mapper); - return new EasyStream<>(stream().flatMap(mapper)); + return new EasyStream<>(unwrap().flatMap(mapper)); } /** @@ -493,7 +493,7 @@ public interface TransformableWrappedStream childrenSetter.accept(e, null))); + return wrap(flatMap(recursive).peek(e -> childrenSetter.accept(e, null))); } // endregion @@ -511,7 +511,7 @@ public interface TransformableWrappedStream EasyStream map(final Function mapper) { Objects.requireNonNull(mapper); - return new EasyStream<>(stream().map(mapper)); + return new EasyStream<>(unwrap().map(mapper)); } /** diff --git a/hutool-core/src/main/java/cn/hutool/core/stream/WrappedStream.java b/hutool-core/src/main/java/cn/hutool/core/stream/WrappedStream.java index 4a53bf5d4..8f9399f16 100644 --- a/hutool-core/src/main/java/cn/hutool/core/stream/WrappedStream.java +++ b/hutool-core/src/main/java/cn/hutool/core/stream/WrappedStream.java @@ -5,7 +5,7 @@ import java.util.function.*; import java.util.stream.*; /** - *

{@link Stream}实例的包装器,用于增强原始的{@link Stream},提供一些额外的中间与终端操作
+ *

{@link Stream}实例的包装器,用于增强原始的{@link Stream},提供一些额外的中间与终端操作。
* 默认提供两个可用实现: *