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 c6c9f14c0..9460a88e9 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
@@ -9,13 +9,42 @@ import cn.hutool.core.lang.mutable.MutableObj;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.text.StrUtil;
import cn.hutool.core.util.ArrayUtil;
-import cn.hutool.core.util.ObjUtil;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
+import java.util.Spliterator;
+import java.util.Spliterators;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.function.*;
-import java.util.stream.*;
+import java.util.function.BiConsumer;
+import java.util.function.BiFunction;
+import java.util.function.BiPredicate;
+import java.util.function.BinaryOperator;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.IntFunction;
+import java.util.function.Predicate;
+import java.util.function.Supplier;
+import java.util.function.ToDoubleFunction;
+import java.util.function.ToIntFunction;
+import java.util.function.ToLongFunction;
+import java.util.function.UnaryOperator;
+import java.util.stream.Collector;
+import java.util.stream.Collectors;
+import java.util.stream.DoubleStream;
+import java.util.stream.IntStream;
+import java.util.stream.LongStream;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
/**
*
{@link Stream}的扩展实现,基于原生Stream进行了封装和增强。
@@ -60,8 +89,13 @@ public class EasyStream implements Stream, Iterable {
protected final Stream stream;
- EasyStream(Stream stream) {
- this.stream = stream;
+ /**
+ * 构造
+ *
+ * @param stream {@link Stream}
+ */
+ EasyStream(final Stream stream) {
+ this.stream = null == stream ? Stream.empty() : stream;
}
// region Static method
@@ -79,7 +113,7 @@ public class EasyStream implements Stream, Iterable {
private final Builder streamBuilder = Stream.builder();
@Override
- public void accept(T t) {
+ public void accept(final T t) {
streamBuilder.accept(t);
}
@@ -107,7 +141,7 @@ public class EasyStream implements Stream, Iterable {
* @param 元素类型
* @return 包含单个元素的串行流
*/
- public static EasyStream of(T t) {
+ public static EasyStream of(final T t) {
return new EasyStream<>(Stream.of(t));
}
@@ -121,7 +155,7 @@ public class EasyStream implements Stream, Iterable {
*/
@SafeVarargs
@SuppressWarnings("varargs")
- public static EasyStream of(T... values) {
+ public static EasyStream of(final T... values) {
return ArrayUtil.isEmpty(values) ? EasyStream.empty() : new EasyStream<>(Stream.of(values));
}
@@ -132,7 +166,7 @@ public class EasyStream implements Stream, Iterable {
* @param 元素类型
* @return 流
*/
- public static EasyStream of(Iterable iterable) {
+ public static EasyStream of(final Iterable iterable) {
return of(iterable, false);
}
@@ -144,8 +178,12 @@ public class EasyStream implements Stream, Iterable {
* @param 元素类型
* @return 流
*/
- public static EasyStream of(Iterable iterable, boolean parallel) {
- return Opt.ofNullable(iterable).map(Iterable::spliterator).map(spliterator -> StreamSupport.stream(spliterator, parallel)).map(EasyStream::new).orElseGet(EasyStream::empty);
+ public static EasyStream of(final Iterable iterable, final boolean parallel) {
+ return Opt.ofNullable(iterable)
+ .map(Iterable::spliterator)
+ .map(spliterator -> StreamSupport.stream(spliterator, parallel))
+ .map(EasyStream::new)
+ .orElseGet(EasyStream::empty);
}
/**
@@ -155,8 +193,8 @@ public class EasyStream implements Stream, Iterable {
* @param 元素类型
* @return 流
*/
- public static EasyStream of(Stream stream) {
- return ObjUtil.isNull(stream) ? EasyStream.empty() : new EasyStream<>(stream);
+ public static EasyStream of(final Stream stream) {
+ return new EasyStream<>(stream);
}
/**
@@ -192,7 +230,7 @@ public class EasyStream implements Stream, Iterable {
* @param next 用上一个元素作为参数执行并返回一个新的元素
* @return 无限有序流
*/
- public static EasyStream iterate(T seed, Predicate super T> hasNext, UnaryOperator next) {
+ public static EasyStream iterate(final T seed, final Predicate super T> hasNext, final UnaryOperator next) {
Objects.requireNonNull(next);
Objects.requireNonNull(hasNext);
return new EasyStream<>(StreamUtil.iterate(seed, hasNext, next));
@@ -207,7 +245,7 @@ public class EasyStream implements Stream, Iterable {
* @param s 用来生成元素的 {@code Supplier}
* @return 无限串行无序流
*/
- public static EasyStream generate(Supplier s) {
+ public static EasyStream generate(final Supplier s) {
return new EasyStream<>(Stream.generate(s));
}
@@ -223,7 +261,7 @@ public class EasyStream implements Stream, Iterable {
* @param b 第二个流
* @return 拼接两个流之后的流
*/
- public static EasyStream concat(Stream extends T> a, Stream extends T> b) {
+ public static EasyStream concat(final Stream extends T> a, final Stream extends T> b) {
return new EasyStream<>(Stream.concat(a, b));
}
@@ -234,7 +272,7 @@ public class EasyStream implements Stream, Iterable {
* @param regex 正则
* @return 拆分后元素组成的流
*/
- public static EasyStream split(CharSequence str, String regex) {
+ public static EasyStream split(final CharSequence str, final String regex) {
return Opt.ofBlankAble(str).map(CharSequence::toString).map(s -> s.split(regex)).map(EasyStream::of).orElseGet(EasyStream::empty);
}
@@ -249,7 +287,7 @@ public class EasyStream implements Stream, Iterable {
* @return 返回叠加过滤操作后的流
*/
@Override
- public EasyStream filter(Predicate super T> predicate) {
+ public EasyStream filter(final Predicate super T> predicate) {
return new EasyStream<>(stream.filter(predicate));
}
@@ -262,7 +300,7 @@ public class EasyStream implements Stream, Iterable {
* @param value 用来匹配的值
* @return 与 指定操作结果 匹配 指定值 的元素组成的流
*/
- public EasyStream filter(Function super T, ? extends R> mapper, R value) {
+ public EasyStream filter(final Function super T, ? extends R> mapper, final R value) {
Objects.requireNonNull(mapper);
return filter(e -> Objects.equals(mapper.apply(e), value));
}
@@ -274,12 +312,12 @@ public class EasyStream implements Stream, Iterable {
* @param predicate 断言
* @return 返回叠加过滤操作后的流
*/
- public EasyStream filterIdx(BiPredicate super T, Integer> predicate) {
+ public EasyStream filterIdx(final BiPredicate super T, Integer> predicate) {
Objects.requireNonNull(predicate);
if (isParallel()) {
return filter(e -> predicate.test(e, NOT_FOUND_INDEX));
} else {
- MutableInt index = new MutableInt(NOT_FOUND_INDEX);
+ final MutableInt index = new MutableInt(NOT_FOUND_INDEX);
return filter(e -> predicate.test(e, index.incrementAndGet()));
}
}
@@ -302,7 +340,7 @@ public class EasyStream implements Stream, Iterable {
* @return 返回叠加操作后的流
*/
@Override
- public EasyStream map(Function super T, ? extends R> mapper) {
+ public EasyStream map(final Function super T, ? extends R> mapper) {
return new EasyStream<>(stream.map(mapper));
}
@@ -318,7 +356,7 @@ public class EasyStream implements Stream, Iterable {
* @param 函数执行后返回的类型
* @return 新元素组成的流
*/
- public EasyStream mapNonNull(Function super T, ? extends R> mapper) {
+ public EasyStream mapNonNull(final Function super T, ? extends R> mapper) {
return nonNull().map(mapper).nonNull();
}
@@ -330,12 +368,12 @@ public class EasyStream implements Stream, Iterable {
* @param 函数执行后返回的类型
* @return 返回叠加操作后的流
*/
- public EasyStream mapIdx(BiFunction super T, Integer, ? extends R> mapper) {
+ public EasyStream mapIdx(final BiFunction super T, Integer, ? extends R> mapper) {
Objects.requireNonNull(mapper);
if (isParallel()) {
return map(e -> mapper.apply(e, NOT_FOUND_INDEX));
} else {
- MutableInt index = new MutableInt(NOT_FOUND_INDEX);
+ final MutableInt index = new MutableInt(NOT_FOUND_INDEX);
return map(e -> mapper.apply(e, index.incrementAndGet()));
}
}
@@ -353,7 +391,7 @@ public class EasyStream implements Stream, Iterable {
* @return 返回叠加拆分操作后的流
*/
@Override
- public EasyStream flatMap(Function super T, ? extends Stream extends R>> mapper) {
+ public EasyStream flatMap(final Function super T, ? extends Stream extends R>> mapper) {
return new EasyStream<>(stream.flatMap(mapper));
}
@@ -365,12 +403,12 @@ public class EasyStream implements Stream, Iterable {
* @param 拆分后流的元素类型
* @return 返回叠加拆分操作后的流
*/
- public EasyStream flatMapIdx(BiFunction super T, Integer, ? extends Stream extends R>> mapper) {
+ public EasyStream flatMapIdx(final BiFunction super T, Integer, ? extends Stream extends R>> mapper) {
Objects.requireNonNull(mapper);
if (isParallel()) {
return flatMap(e -> mapper.apply(e, NOT_FOUND_INDEX));
} else {
- MutableInt index = new MutableInt(NOT_FOUND_INDEX);
+ final MutableInt index = new MutableInt(NOT_FOUND_INDEX);
return flatMap(e -> mapper.apply(e, index.incrementAndGet()));
}
}
@@ -383,7 +421,7 @@ public class EasyStream implements Stream, Iterable {
* @return 叠加操作后元素类型全为int的流
*/
@Override
- public IntStream mapToInt(ToIntFunction super T> mapper) {
+ public IntStream mapToInt(final ToIntFunction super T> mapper) {
return stream.mapToInt(mapper);
}
@@ -395,7 +433,7 @@ public class EasyStream implements Stream, Iterable {
* @return 叠加操作后元素类型全为long的流
*/
@Override
- public LongStream mapToLong(ToLongFunction super T> mapper) {
+ public LongStream mapToLong(final ToLongFunction super T> mapper) {
return stream.mapToLong(mapper);
}
@@ -407,7 +445,7 @@ public class EasyStream implements Stream, Iterable {
* @return 叠加操作后元素类型全为double的流
*/
@Override
- public DoubleStream mapToDouble(ToDoubleFunction super T> mapper) {
+ public DoubleStream mapToDouble(final ToDoubleFunction super T> mapper) {
return stream.mapToDouble(mapper);
}
@@ -424,7 +462,7 @@ public class EasyStream implements Stream, Iterable {
* @param 拆分后流的元素类型
* @return 返回叠加拆分操作后的流
*/
- public EasyStream flat(Function super T, ? extends Iterable extends R>> mapper) {
+ public EasyStream flat(final Function super T, ? extends Iterable extends R>> mapper) {
Objects.requireNonNull(mapper);
return flatMap(w -> of(mapper.apply(w)));
}
@@ -440,7 +478,7 @@ public class EasyStream implements Stream, Iterable {
* @see #flat(Function)
* @see #nonNull()
*/
- public EasyStream flatNonNull(Function super T, ? extends Iterable extends R>> mapper) {
+ public EasyStream flatNonNull(final Function super T, ? extends Iterable extends R>> mapper) {
return nonNull().flat(mapper).nonNull();
}
@@ -452,7 +490,7 @@ public class EasyStream implements Stream, Iterable {
* @return 返回叠加拆分操作后的IntStream
*/
@Override
- public IntStream flatMapToInt(Function super T, ? extends IntStream> mapper) {
+ public IntStream flatMapToInt(final Function super T, ? extends IntStream> mapper) {
return stream.flatMapToInt(mapper);
}
@@ -464,7 +502,7 @@ public class EasyStream implements Stream, Iterable {
* @return 返回叠加拆分操作后的LongStream
*/
@Override
- public LongStream flatMapToLong(Function super T, ? extends LongStream> mapper) {
+ public LongStream flatMapToLong(final Function super T, ? extends LongStream> mapper) {
return stream.flatMapToLong(mapper);
}
@@ -476,7 +514,7 @@ public class EasyStream implements Stream, Iterable {
* @return 返回叠加拆分操作后的DoubleStream
*/
@Override
- public DoubleStream flatMapToDouble(Function super T, ? extends DoubleStream> mapper) {
+ public DoubleStream flatMapToDouble(final Function super T, ? extends DoubleStream> mapper) {
return stream.flatMapToDouble(mapper);
}
@@ -488,10 +526,10 @@ public class EasyStream implements Stream, Iterable {
* @param 拆分后流的元素类型
* @return 返回叠加拆分操作后的流
*/
- public EasyStream mapMulti(BiConsumer super T, ? super FastStreamBuilder> mapper) {
+ public EasyStream mapMulti(final BiConsumer super T, ? super FastStreamBuilder> mapper) {
Objects.requireNonNull(mapper);
return flatMap(e -> {
- FastStreamBuilder buffer = EasyStream.builder();
+ final FastStreamBuilder buffer = EasyStream.builder();
mapper.accept(e, buffer);
return buffer.build();
});
@@ -516,15 +554,15 @@ public class EasyStream implements Stream, Iterable {
* @param keyExtractor 去重依据
* @return 一个具有去重特征的流
*/
- public EasyStream distinct(Function super T, F> keyExtractor) {
+ public EasyStream distinct(final Function super T, F> keyExtractor) {
Objects.requireNonNull(keyExtractor);
if (isParallel()) {
- ConcurrentHashMap exists = MapUtil.newConcurrentHashMap();
+ final ConcurrentHashMap exists = MapUtil.newConcurrentHashMap();
// 标记是否出现过null值,用于保留第一个出现的null
// 由于ConcurrentHashMap的key不能为null,所以用此变量来标记
- AtomicBoolean hasNull = new AtomicBoolean(false);
+ final AtomicBoolean hasNull = new AtomicBoolean(false);
return of(stream.filter(e -> {
- F key = keyExtractor.apply(e);
+ final F key = keyExtractor.apply(e);
if (key == null) {
// 已经出现过null值,跳过该值
if (hasNull.get()) {
@@ -538,7 +576,7 @@ public class EasyStream implements Stream, Iterable {
}
})).parallel();
} else {
- Set exists = new HashSet<>();
+ final Set exists = new HashSet<>();
return of(stream.filter(e -> exists.add(keyExtractor.apply(e))));
}
}
@@ -566,7 +604,7 @@ public class EasyStream implements Stream, Iterable {
* @return 一个元素按指定的Comparator排序的流
*/
@Override
- public EasyStream sorted(Comparator super T> comparator) {
+ public EasyStream sorted(final Comparator super T> comparator) {
return new EasyStream<>(stream.sorted(comparator));
}
@@ -588,7 +626,7 @@ public class EasyStream implements Stream, Iterable {
* }
*/
@Override
- public EasyStream peek(Consumer super T> action) {
+ public EasyStream peek(final Consumer super T> action) {
return new EasyStream<>(stream.peek(action));
}
@@ -609,7 +647,7 @@ public class EasyStream implements Stream, Iterable {
* @return 截取后的流
*/
@Override
- public EasyStream limit(long maxSize) {
+ public EasyStream limit(final long maxSize) {
return new EasyStream<>(stream.limit(maxSize));
}
@@ -621,7 +659,7 @@ public class EasyStream implements Stream, Iterable {
* @return 丢弃前面n个元素后的剩余元素组成的流
*/
@Override
- public EasyStream skip(long n) {
+ public EasyStream skip(final long n) {
return new EasyStream<>(stream.skip(n));
}
@@ -644,7 +682,7 @@ public class EasyStream implements Stream, Iterable {
* @param action 操作
*/
@Override
- public void forEach(Consumer super T> action) {
+ public void forEach(final Consumer super T> action) {
stream.forEach(action);
}
@@ -654,12 +692,12 @@ public class EasyStream implements Stream, Iterable {
*
* @param action 操作
*/
- public void forEachIdx(BiConsumer super T, Integer> action) {
+ public void forEachIdx(final BiConsumer super T, Integer> action) {
Objects.requireNonNull(action);
if (isParallel()) {
stream.forEach(e -> action.accept(e, NOT_FOUND_INDEX));
} else {
- MutableInt index = new MutableInt(NOT_FOUND_INDEX);
+ final MutableInt index = new MutableInt(NOT_FOUND_INDEX);
stream.forEach(e -> action.accept(e, index.incrementAndGet()));
}
}
@@ -671,7 +709,7 @@ public class EasyStream implements Stream, Iterable {
* @param action 操作
*/
@Override
- public void forEachOrdered(Consumer super T> action) {
+ public void forEachOrdered(final Consumer super T> action) {
stream.forEachOrdered(action);
}
@@ -681,12 +719,12 @@ public class EasyStream implements Stream, Iterable {
*
* @param action 操作
*/
- public void forEachOrderedIdx(BiConsumer super T, Integer> action) {
+ public void forEachOrderedIdx(final BiConsumer super T, Integer> action) {
Objects.requireNonNull(action);
if (isParallel()) {
stream.forEachOrdered(e -> action.accept(e, NOT_FOUND_INDEX));
} else {
- MutableInt index = new MutableInt(NOT_FOUND_INDEX);
+ final MutableInt index = new MutableInt(NOT_FOUND_INDEX);
stream.forEachOrdered(e -> action.accept(e, index.incrementAndGet()));
}
}
@@ -712,7 +750,7 @@ public class EasyStream implements Stream, Iterable {
* @throws ArrayStoreException 如果元素转换失败,例如不是该元素类型及其父类,则抛出该异常
*/
@Override
- public A[] toArray(IntFunction generator) {
+ public A[] toArray(final IntFunction generator) {
//noinspection SuspiciousToArrayCall
return stream.toArray(generator);
}
@@ -738,7 +776,7 @@ public class EasyStream implements Stream, Iterable {
* @return 聚合计算后的值
*/
@Override
- public T reduce(T identity, BinaryOperator accumulator) {
+ public T reduce(final T identity, final BinaryOperator accumulator) {
return stream.reduce(identity, accumulator);
}
@@ -773,7 +811,7 @@ public class EasyStream implements Stream, Iterable {
* @see #max(Comparator)
*/
@Override
- public Optional reduce(BinaryOperator accumulator) {
+ public Optional reduce(final BinaryOperator accumulator) {
return stream.reduce(accumulator);
}
@@ -790,7 +828,7 @@ public class EasyStream implements Stream, Iterable {
* @see #reduce(Object, BinaryOperator)
*/
@Override
- public U reduce(U identity, BiFunction