!759 建议将FastStream修改为EasyStream

Merge pull request !759 from emptypoint/modify-FastStream
This commit is contained in:
Looly 2022-08-19 15:11:12 +00:00 committed by Gitee
commit d17eb88635
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 171 additions and 171 deletions

View File

@ -48,7 +48,7 @@ import java.util.stream.*;
* @see java.util.stream.Stream
* @since 6.0.0
*/
public class FastStream<T> implements Stream<T>, Iterable<T> {
public class EasyStream<T> implements Stream<T>, Iterable<T> {
/**
* 代表不存在的下标, 一般用于并行流的下标, 或者未找到元素时的下标
*/
@ -56,7 +56,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
protected final Stream<T> stream;
FastStream(Stream<T> stream) {
EasyStream(Stream<T> stream) {
this.stream = stream;
}
@ -80,8 +80,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
}
@Override
public FastStream<T> build() {
return new FastStream<>(streamBuilder.build());
public EasyStream<T> build() {
return new EasyStream<>(streamBuilder.build());
}
};
}
@ -92,8 +92,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param <T> 元素类型
* @return 一个空的串行流
*/
public static <T> FastStream<T> empty() {
return new FastStream<>(Stream.empty());
public static <T> EasyStream<T> empty() {
return new EasyStream<>(Stream.empty());
}
/**
@ -103,8 +103,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param <T> 元素类型
* @return 包含单个元素的串行流
*/
public static <T> FastStream<T> of(T t) {
return new FastStream<>(Stream.of(t));
public static <T> EasyStream<T> of(T t) {
return new EasyStream<>(Stream.of(t));
}
/**
@ -117,8 +117,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
*/
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> FastStream<T> of(T... values) {
return ArrayUtil.isEmpty(values) ? FastStream.empty() : new FastStream<>(Stream.of(values));
public static <T> EasyStream<T> of(T... values) {
return ArrayUtil.isEmpty(values) ? EasyStream.empty() : new EasyStream<>(Stream.of(values));
}
/**
@ -127,7 +127,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* <p>
* 例如
* {@code FastStream.iterate(0, i -> i + 1)}
* 就可以创建从0开始每次+1的无限流使用{@link FastStream#limit(long)}可以限制元素个数
* 就可以创建从0开始每次+1的无限流使用{@link EasyStream#limit(long)}可以限制元素个数
* </p>
*
* @param <T> 元素类型
@ -135,8 +135,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param f 用上一个元素作为参数执行并返回一个新的元素
* @return 无限有序流
*/
public static <T> FastStream<T> iterate(final T seed, final UnaryOperator<T> f) {
return new FastStream<>(Stream.iterate(seed, f));
public static <T> EasyStream<T> iterate(final T seed, final UnaryOperator<T> f) {
return new EasyStream<>(Stream.iterate(seed, f));
}
/**
@ -145,7 +145,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* <p>
* 例如
* {@code FastStream.iterate(0, i -> i < 3, i -> ++i)}
* 就可以创建包含元素0,1,2的流使用{@link FastStream#limit(long)}可以限制元素个数
* 就可以创建包含元素0,1,2的流使用{@link EasyStream#limit(long)}可以限制元素个数
* </p>
*
* @param <T> 元素类型
@ -154,10 +154,10 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param next 用上一个元素作为参数执行并返回一个新的元素
* @return 无限有序流
*/
public static <T> FastStream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next) {
public static <T> EasyStream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next) {
Objects.requireNonNull(next);
Objects.requireNonNull(hasNext);
return new FastStream<>(StreamUtil.iterate(seed, hasNext, next));
return new EasyStream<>(StreamUtil.iterate(seed, hasNext, next));
}
/**
@ -169,8 +169,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param s 用来生成元素的 {@code Supplier}
* @return 无限串行无序流
*/
public static <T> FastStream<T> generate(Supplier<T> s) {
return new FastStream<>(Stream.generate(s));
public static <T> EasyStream<T> generate(Supplier<T> s) {
return new EasyStream<>(Stream.generate(s));
}
/**
@ -185,8 +185,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param b 第二个流
* @return 拼接两个流之后的流
*/
public static <T> FastStream<T> concat(Stream<? extends T> a, Stream<? extends T> b) {
return new FastStream<>(Stream.concat(a, b));
public static <T> EasyStream<T> concat(Stream<? extends T> a, Stream<? extends T> b) {
return new EasyStream<>(Stream.concat(a, b));
}
/**
@ -196,7 +196,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param <T> 元素类型
* @return
*/
public static <T> FastStream<T> of(Iterable<T> iterable) {
public static <T> EasyStream<T> of(Iterable<T> iterable) {
return of(iterable, false);
}
@ -208,8 +208,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param <T> 元素类型
* @return
*/
public static <T> FastStream<T> of(Iterable<T> iterable, boolean parallel) {
return Opt.ofNullable(iterable).map(Iterable::spliterator).map(spliterator -> StreamSupport.stream(spliterator, parallel)).map(FastStream::new).orElseGet(FastStream::empty);
public static <T> EasyStream<T> of(Iterable<T> iterable, boolean parallel) {
return Opt.ofNullable(iterable).map(Iterable::spliterator).map(spliterator -> StreamSupport.stream(spliterator, parallel)).map(EasyStream::new).orElseGet(EasyStream::empty);
}
/**
@ -219,8 +219,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param <T> 元素类型
* @return
*/
public static <T> FastStream<T> of(Stream<T> stream) {
return new FastStream<>(Objects.requireNonNull(stream));
public static <T> EasyStream<T> of(Stream<T> stream) {
return new EasyStream<>(Objects.requireNonNull(stream));
}
/**
@ -230,8 +230,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param regex 正则
* @return 拆分后元素组成的流
*/
public static FastStream<String> split(CharSequence str, String regex) {
return Opt.ofBlankAble(str).map(CharSequence::toString).map(s -> s.split(regex)).map(FastStream::of).orElseGet(FastStream::empty);
public static EasyStream<String> split(CharSequence str, String regex) {
return Opt.ofBlankAble(str).map(CharSequence::toString).map(s -> s.split(regex)).map(EasyStream::of).orElseGet(EasyStream::empty);
}
// --------------------------------------------------------------- Static method end
@ -245,8 +245,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @return 返回叠加过滤操作后的流
*/
@Override
public FastStream<T> filter(Predicate<? super T> predicate) {
return new FastStream<>(stream.filter(predicate));
public EasyStream<T> filter(Predicate<? super T> predicate) {
return new EasyStream<>(stream.filter(predicate));
}
/**
@ -258,7 +258,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param value 用来匹配的值
* @return 指定操作结果 匹配 指定值 的元素组成的流
*/
public <R> FastStream<T> filter(Function<? super T, ? extends R> mapper, R value) {
public <R> EasyStream<T> filter(Function<? super T, ? extends R> mapper, R value) {
Objects.requireNonNull(mapper);
return filter(e -> Objects.equals(mapper.apply(e), value));
}
@ -270,7 +270,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param predicate 断言
* @return 返回叠加过滤操作后的流
*/
public FastStream<T> filterIdx(BiPredicate<? super T, Integer> predicate) {
public EasyStream<T> filterIdx(BiPredicate<? super T, Integer> predicate) {
Objects.requireNonNull(predicate);
if (isParallel()) {
return filter(e -> predicate.test(e, NOT_FOUND_INDEX));
@ -285,8 +285,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
*
* @return 过滤后的流
*/
public FastStream<T> nonNull() {
return new FastStream<>(stream.filter(Objects::nonNull));
public EasyStream<T> nonNull() {
return new EasyStream<>(stream.filter(Objects::nonNull));
}
/**
@ -298,8 +298,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @return 返回叠加操作后的流
*/
@Override
public <R> FastStream<R> map(Function<? super T, ? extends R> mapper) {
return new FastStream<>(stream.map(mapper));
public <R> EasyStream<R> map(Function<? super T, ? extends R> mapper) {
return new EasyStream<>(stream.map(mapper));
}
/**
@ -314,7 +314,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param <R> 函数执行后返回的类型
* @return 新元素组成的流
*/
public <R> FastStream<R> mapNonNull(Function<? super T, ? extends R> mapper) {
public <R> EasyStream<R> mapNonNull(Function<? super T, ? extends R> mapper) {
return nonNull().<R>map(mapper).nonNull();
}
@ -326,7 +326,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param <R> 函数执行后返回的类型
* @return 返回叠加操作后的流
*/
public <R> FastStream<R> mapIdx(BiFunction<? super T, Integer, ? extends R> mapper) {
public <R> EasyStream<R> mapIdx(BiFunction<? super T, Integer, ? extends R> mapper) {
Objects.requireNonNull(mapper);
if (isParallel()) {
return map(e -> mapper.apply(e, NOT_FOUND_INDEX));
@ -349,8 +349,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @return 返回叠加拆分操作后的流
*/
@Override
public <R> FastStream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper) {
return new FastStream<>(stream.flatMap(mapper));
public <R> EasyStream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper) {
return new EasyStream<>(stream.flatMap(mapper));
}
/**
@ -361,7 +361,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param <R> 拆分后流的元素类型
* @return 返回叠加拆分操作后的流
*/
public <R> FastStream<R> flatMapIdx(BiFunction<? super T, Integer, ? extends Stream<? extends R>> mapper) {
public <R> EasyStream<R> flatMapIdx(BiFunction<? super T, Integer, ? extends Stream<? extends R>> mapper) {
Objects.requireNonNull(mapper);
if (isParallel()) {
return flatMap(e -> mapper.apply(e, NOT_FOUND_INDEX));
@ -372,7 +372,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
}
/**
* {@link FastStream#map(Function)}一样只不过函数的返回值必须为int类型
* {@link EasyStream#map(Function)}一样只不过函数的返回值必须为int类型
* 这是一个无状态中间操作
*
* @param mapper 返回值为int类型的函数
@ -384,7 +384,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
}
/**
* {@link FastStream#map(Function)}一样只不过函数的返回值必须为long类型
* {@link EasyStream#map(Function)}一样只不过函数的返回值必须为long类型
* 这是一个无状态中间操作
*
* @param mapper 返回值为long类型的函数
@ -396,7 +396,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
}
/**
* {@link FastStream#map(Function)}一样只不过函数的返回值必须为double类型
* {@link EasyStream#map(Function)}一样只不过函数的返回值必须为double类型
* 这是一个无状态中间操作
*
* @param mapper 返回值为double类型的函数
@ -420,7 +420,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param <R> 拆分后流的元素类型
* @return 返回叠加拆分操作后的流
*/
public <R> FastStream<R> flat(Function<? super T, ? extends Iterable<? extends R>> mapper) {
public <R> EasyStream<R> flat(Function<? super T, ? extends Iterable<? extends R>> mapper) {
Objects.requireNonNull(mapper);
return flatMap(w -> of(mapper.apply(w)));
}
@ -436,7 +436,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @see #flat(Function)
* @see #nonNull()
*/
public <R> FastStream<R> flatNonNull(Function<? super T, ? extends Iterable<? extends R>> mapper) {
public <R> EasyStream<R> flatNonNull(Function<? super T, ? extends Iterable<? extends R>> mapper) {
return nonNull().flat(mapper).nonNull();
}
@ -484,10 +484,10 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param <R> 拆分后流的元素类型
* @return 返回叠加拆分操作后的流
*/
public <R> FastStream<R> mapMulti(BiConsumer<? super T, ? super FastStreamBuilder<R>> mapper) {
public <R> EasyStream<R> mapMulti(BiConsumer<? super T, ? super FastStreamBuilder<R>> mapper) {
Objects.requireNonNull(mapper);
return flatMap(e -> {
FastStreamBuilder<R> buffer = FastStream.builder();
FastStreamBuilder<R> buffer = EasyStream.builder();
mapper.accept(e, buffer);
return buffer.build();
});
@ -500,8 +500,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @return 一个具有去重特征的流
*/
@Override
public FastStream<T> distinct() {
return new FastStream<>(stream.distinct());
public EasyStream<T> distinct() {
return new EasyStream<>(stream.distinct());
}
/**
@ -512,7 +512,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param keyExtractor 去重依据
* @return 一个具有去重特征的流
*/
public <F> FastStream<T> distinct(Function<? super T, F> keyExtractor) {
public <F> EasyStream<T> distinct(Function<? super T, F> keyExtractor) {
Objects.requireNonNull(keyExtractor);
if (isParallel()) {
ConcurrentHashMap<F, Boolean> exists = MapUtil.newConcurrentHashMap();
@ -548,8 +548,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @return 一个元素按自然顺序排序的流
*/
@Override
public FastStream<T> sorted() {
return new FastStream<>(stream.sorted());
public EasyStream<T> sorted() {
return new EasyStream<>(stream.sorted());
}
/**
@ -562,8 +562,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @return 一个元素按指定的Comparator排序的流
*/
@Override
public FastStream<T> sorted(Comparator<? super T> comparator) {
return new FastStream<>(stream.sorted(comparator));
public EasyStream<T> sorted(Comparator<? super T> comparator) {
return new EasyStream<>(stream.sorted(comparator));
}
/**
@ -584,8 +584,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* }</pre>
*/
@Override
public FastStream<T> peek(Consumer<? super T> action) {
return new FastStream<>(stream.peek(action));
public EasyStream<T> peek(Consumer<? super T> action) {
return new EasyStream<>(stream.peek(action));
}
/**
@ -593,7 +593,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
*
* @return 返回叠加操作后的FastStream
*/
public FastStream<T> log() {
public EasyStream<T> log() {
return peek(Console::log);
}
@ -605,8 +605,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @return 截取后的流
*/
@Override
public FastStream<T> limit(long maxSize) {
return new FastStream<>(stream.limit(maxSize));
public EasyStream<T> limit(long maxSize) {
return new EasyStream<>(stream.limit(maxSize));
}
/**
@ -617,8 +617,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @return 丢弃前面n个元素后的剩余元素组成的流
*/
@Override
public FastStream<T> skip(long n) {
return new FastStream<>(stream.skip(n));
public EasyStream<T> skip(long n) {
return new EasyStream<>(stream.skip(n));
}
/**
@ -627,7 +627,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @return 串行流
*/
@Override
public FastStream<T> sequential() {
public EasyStream<T> sequential() {
//noinspection ResultOfMethodCallIgnored
stream.sequential();
return this;
@ -982,7 +982,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
*
* @return 反转元素顺序
*/
public FastStream<T> reverse() {
public EasyStream<T> reverse() {
//noinspection unchecked
final T[] array = (T[]) toArray();
ArrayUtil.reverse(array);
@ -1025,7 +1025,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @return 并行流
*/
@Override
public FastStream<T> parallel() {
public EasyStream<T> parallel() {
//noinspection ResultOfMethodCallIgnored
stream.parallel();
return this;
@ -1037,7 +1037,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param parallel 是否并行
* @return
*/
public FastStream<T> parallel(boolean parallel) {
public EasyStream<T> parallel(boolean parallel) {
return parallel ? parallel() : sequential();
}
@ -1048,8 +1048,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @return 无序流
*/
@Override
public FastStream<T> unordered() {
return new FastStream<>(stream.unordered());
public EasyStream<T> unordered() {
return new EasyStream<>(stream.unordered());
}
/**
@ -1059,7 +1059,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @return
*/
@Override
public FastStream<T> onClose(Runnable closeHandler) {
public EasyStream<T> onClose(Runnable closeHandler) {
//noinspection ResultOfMethodCallIgnored
stream.onClose(closeHandler);
return this;
@ -1071,8 +1071,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param obj 元素
* @return
*/
public FastStream<T> push(T obj) {
return FastStream.concat(this.stream, of(obj));
public EasyStream<T> push(T obj) {
return EasyStream.concat(this.stream, of(obj));
}
/**
@ -1082,8 +1082,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @return
*/
@SuppressWarnings("unchecked")
public FastStream<T> push(T... obj) {
return FastStream.concat(this.stream, of(obj));
public EasyStream<T> push(T... obj) {
return EasyStream.concat(this.stream, of(obj));
}
/**
@ -1092,8 +1092,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param obj 元素
* @return
*/
public FastStream<T> unshift(T obj) {
return FastStream.concat(of(obj), this.stream);
public EasyStream<T> unshift(T obj) {
return EasyStream.concat(of(obj), this.stream);
}
/**
@ -1103,8 +1103,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @return
*/
@SafeVarargs
public final FastStream<T> unshift(T... obj) {
return FastStream.concat(of(obj), this.stream);
public final EasyStream<T> unshift(T... obj) {
return EasyStream.concat(of(obj), this.stream);
}
/**
@ -1377,7 +1377,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param <R> 合并后的结果对象类型
* @return 合并后的结果对象的流
*/
public <U, R> FastStream<R> zip(Iterable<U> other,
public <U, R> EasyStream<R> zip(Iterable<U> other,
BiFunction<? super T, ? super U, ? extends R> zipper) {
Objects.requireNonNull(zipper);
final Spliterator<T> keys = spliterator();
@ -1406,7 +1406,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @return 操作后的流
*/
@SafeVarargs
public final FastStream<T> splice(int start, int deleteCount, T... items) {
public final EasyStream<T> splice(int start, int deleteCount, T... items) {
return of(ListUtil.splice(toList(), start, deleteCount, items))
.parallel(isParallel())
.onClose(stream::close);
@ -1421,13 +1421,13 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param batchSize 指定长度, 正整数
* @return 切好的流
*/
public FastStream<FastStream<T>> split(final int batchSize) {
public EasyStream<EasyStream<T>> split(final int batchSize) {
List<T> list = toList();
final int size = list.size();
// 指定长度 大于等于 列表长度
if (size <= batchSize) {
// 返回第一层只有单个元素的双层流形如[[1,2,3,4,5]]
return FastStream.<FastStream<T>>of(of(list, isParallel()));
return EasyStream.<EasyStream<T>>of(of(list, isParallel()));
}
return iterate(0, i -> i < size, i -> i + batchSize)
.map(skip -> of(list.subList(skip, Math.min(size, skip + batchSize)), isParallel()))
@ -1444,8 +1444,8 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param batchSize 指定长度, 正整数
* @return 切好的流
*/
public FastStream<List<T>> splitList(final int batchSize) {
return split(batchSize).map(FastStream::toList);
public EasyStream<List<T>> splitList(final int batchSize) {
return split(batchSize).map(EasyStream::toList);
}
/**
@ -1467,7 +1467,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param predicate 断言
* @return 与指定断言匹配的元素组成的流
*/
public FastStream<T> takeWhile(Predicate<? super T> predicate) {
public EasyStream<T> takeWhile(Predicate<? super T> predicate) {
Objects.requireNonNull(predicate);
return of(StreamUtil.takeWhile(stream, predicate));
}
@ -1492,7 +1492,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
* @param predicate 断言
* @return 剩余元素组成的流
*/
public FastStream<T> dropWhile(Predicate<? super T> predicate) {
public EasyStream<T> dropWhile(Predicate<? super T> predicate) {
Objects.requireNonNull(predicate);
return of(StreamUtil.dropWhile(stream, predicate));
}
@ -1515,7 +1515,7 @@ public class FastStream<T> implements Stream<T>, Iterable<T> {
return !isEmpty();
}
public interface FastStreamBuilder<T> extends Consumer<T>, cn.hutool.core.builder.Builder<FastStream<T>> {
public interface FastStreamBuilder<T> extends Consumer<T>, cn.hutool.core.builder.Builder<EasyStream<T>> {
/**
* Adds an element to the stream being built.

View File

@ -15,57 +15,57 @@ import static java.util.Collections.singletonList;
/**
* @author VampireAchao
*/
public class FastStreamTest {
public class EasyStreamTest {
@Test
public void testBuilder() {
List<Integer> list = FastStream.<Integer>builder().add(1).add(2).add(3).build().toList();
List<Integer> list = EasyStream.<Integer>builder().add(1).add(2).add(3).build().toList();
Assert.assertEquals(Arrays.asList(1, 2, 3), list);
}
@Test
public void testGenerate() {
List<Integer> list = FastStream.generate(() -> 0).limit(3).toList();
List<Integer> list = EasyStream.generate(() -> 0).limit(3).toList();
Assert.assertEquals(Arrays.asList(0, 0, 0), list);
}
@Test
public void testOf() {
Assert.assertEquals(3, FastStream.of(Arrays.asList(1, 2, 3), true).count());
Assert.assertEquals(3, FastStream.of(1, 2, 3).count());
Assert.assertEquals(3, FastStream.of(Stream.builder().add(1).add(2).add(3).build()).count());
Assert.assertEquals(3, EasyStream.of(Arrays.asList(1, 2, 3), true).count());
Assert.assertEquals(3, EasyStream.of(1, 2, 3).count());
Assert.assertEquals(3, EasyStream.of(Stream.builder().add(1).add(2).add(3).build()).count());
}
@Test
public void testSplit() {
List<Integer> list = FastStream.split("1,2,3", ",").map(Integer::valueOf).toList();
List<Integer> list = EasyStream.split("1,2,3", ",").map(Integer::valueOf).toList();
Assert.assertEquals(Arrays.asList(1, 2, 3), list);
}
@Test
public void testIterator() {
List<Integer> list = FastStream.iterate(0, i -> i < 3, i -> ++i).toList();
List<Integer> list = EasyStream.iterate(0, i -> i < 3, i -> ++i).toList();
Assert.assertEquals(Arrays.asList(0, 1, 2), list);
}
@Test
public void testToCollection() {
List<Integer> list = Arrays.asList(1, 2, 3);
List<String> toCollection = FastStream.of(list).map(String::valueOf).toColl(LinkedList::new);
List<String> toCollection = EasyStream.of(list).map(String::valueOf).toColl(LinkedList::new);
Assert.assertEquals(Arrays.asList("1", "2", "3"), toCollection);
}
@Test
public void testToList() {
List<Integer> list = Arrays.asList(1, 2, 3);
List<String> toList = FastStream.of(list).map(String::valueOf).toList();
List<String> toList = EasyStream.of(list).map(String::valueOf).toList();
Assert.assertEquals(Arrays.asList("1", "2", "3"), toList);
}
@Test
public void testToSet() {
List<Integer> list = Arrays.asList(1, 2, 3);
Set<String> toSet = FastStream.of(list).map(String::valueOf).toSet();
Set<String> toSet = EasyStream.of(list).map(String::valueOf).toSet();
Assert.assertEquals(new HashSet<>(Arrays.asList("1", "2", "3")), toSet);
}
@ -79,26 +79,26 @@ public class FastStreamTest {
.put(3, "sweet")
.build();
Map<Integer, String> toZip = FastStream.of(orders).toZip(list);
Map<Integer, String> toZip = EasyStream.of(orders).toZip(list);
Assert.assertEquals(map, toZip);
Map<Integer, String> toZipParallel = FastStream.of(orders).parallel().nonNull().toZip(list);
Map<Integer, String> toZipParallel = EasyStream.of(orders).parallel().nonNull().toZip(list);
Assert.assertEquals(map, toZipParallel);
}
@Test
public void testJoin() {
List<Integer> list = Arrays.asList(1, 2, 3);
String joining = FastStream.of(list).join();
String joining = EasyStream.of(list).join();
Assert.assertEquals("123", joining);
Assert.assertEquals("1,2,3", FastStream.of(list).join(","));
Assert.assertEquals("(1,2,3)", FastStream.of(list).join(",", "(", ")"));
Assert.assertEquals("1,2,3", EasyStream.of(list).join(","));
Assert.assertEquals("(1,2,3)", EasyStream.of(list).join(",", "(", ")"));
}
@Test
public void testToMap() {
List<Integer> list = Arrays.asList(1, 2, 3);
Map<String, Integer> identityMap = FastStream.of(list).toMap(String::valueOf);
Map<String, Integer> identityMap = EasyStream.of(list).toMap(String::valueOf);
Assert.assertEquals(new HashMap<String, Integer>() {
private static final long serialVersionUID = 1L;
@ -113,7 +113,7 @@ public class FastStreamTest {
@Test
public void testGroup() {
List<Integer> list = Arrays.asList(1, 2, 3);
Map<String, List<Integer>> group = FastStream.of(list).group(String::valueOf);
Map<String, List<Integer>> group = EasyStream.of(list).group(String::valueOf);
Assert.assertEquals(
new HashMap<String, List<Integer>>() {
private static final long serialVersionUID = 1L;
@ -129,16 +129,16 @@ public class FastStreamTest {
@Test
public void testMapIdx() {
List<String> list = Arrays.asList("dromara", "hutool", "sweet");
List<String> mapIndex = FastStream.of(list).mapIdx((e, i) -> i + 1 + "." + e).toList();
List<String> mapIndex = EasyStream.of(list).mapIdx((e, i) -> i + 1 + "." + e).toList();
Assert.assertEquals(Arrays.asList("1.dromara", "2.hutool", "3.sweet"), mapIndex);
// 并行流时为-1
Assert.assertEquals(Arrays.asList(-1, -1, -1), FastStream.of(1, 2, 3).parallel().mapIdx((e, i) -> i).toList());
Assert.assertEquals(Arrays.asList(-1, -1, -1), EasyStream.of(1, 2, 3).parallel().mapIdx((e, i) -> i).toList());
}
@Test
public void testMapMulti() {
List<Integer> list = Arrays.asList(1, 2, 3);
List<Integer> mapMulti = FastStream.of(list).<Integer>mapMulti((e, buffer) -> {
List<Integer> mapMulti = EasyStream.of(list).<Integer>mapMulti((e, buffer) -> {
for (int i = 0; i < e; i++) {
buffer.accept(e);
}
@ -149,7 +149,7 @@ public class FastStreamTest {
@Test
public void testMapNonNull() {
List<Integer> list = Arrays.asList(1, 2, 3, null);
List<String> mapNonNull = FastStream.of(list).mapNonNull(String::valueOf).toList();
List<String> mapNonNull = EasyStream.of(list).mapNonNull(String::valueOf).toList();
Assert.assertEquals(Arrays.asList("1", "2", "3"), mapNonNull);
}
@ -164,8 +164,8 @@ public class FastStreamTest {
List<Integer> collect2 = list.stream().parallel().distinct().collect(Collectors.toList());
// 使用FastStream去重
List<Integer> distinctBy1 = FastStream.of(list).distinct().toList();
List<Integer> distinctBy2 = FastStream.of(list).parallel().distinct(String::valueOf).toList();
List<Integer> distinctBy1 = EasyStream.of(list).distinct().toList();
List<Integer> distinctBy2 = EasyStream.of(list).parallel().distinct(String::valueOf).toList();
Assert.assertEquals(collect1, distinctBy1);
Assert.assertEquals(collect2, distinctBy2);
@ -174,22 +174,22 @@ public class FastStreamTest {
@Test
public void testForeachIdx() {
List<String> list = Arrays.asList("dromara", "hutool", "sweet");
FastStream.FastStreamBuilder<String> builder = FastStream.builder();
FastStream.of(list).forEachIdx((e, i) -> builder.accept(i + 1 + "." + e));
EasyStream.FastStreamBuilder<String> builder = EasyStream.builder();
EasyStream.of(list).forEachIdx((e, i) -> builder.accept(i + 1 + "." + e));
Assert.assertEquals(Arrays.asList("1.dromara", "2.hutool", "3.sweet"), builder.build().toList());
// 并行流时为-1
FastStream.of(1, 2, 3).parallel().forEachIdx((e, i) -> Assert.assertEquals(-1, (Object) i));
EasyStream.of(1, 2, 3).parallel().forEachIdx((e, i) -> Assert.assertEquals(-1, (Object) i));
}
@Test
public void testForEachOrderedIdx() {
List<String> list = Arrays.asList("dromara", "hutool", "sweet");
FastStream.FastStreamBuilder<String> builder = FastStream.builder();
FastStream.of(list).forEachOrderedIdx((e, i) -> builder.accept(i + 1 + "." + e));
EasyStream.FastStreamBuilder<String> builder = EasyStream.builder();
EasyStream.of(list).forEachOrderedIdx((e, i) -> builder.accept(i + 1 + "." + e));
Assert.assertEquals(Arrays.asList("1.dromara", "2.hutool", "3.sweet"), builder.build().toList());
FastStream.FastStreamBuilder<String> streamBuilder = FastStream.builder();
FastStream.of(list).parallel().forEachOrderedIdx((e, i) -> streamBuilder.accept(i + 1 + "." + e));
EasyStream.FastStreamBuilder<String> streamBuilder = EasyStream.builder();
EasyStream.of(list).parallel().forEachOrderedIdx((e, i) -> streamBuilder.accept(i + 1 + "." + e));
Assert.assertEquals(Arrays.asList("0.dromara", "0.hutool", "0.sweet"), streamBuilder.build().toList());
}
@ -197,10 +197,10 @@ public class FastStreamTest {
@Test
public void testFlatMapIdx() {
List<String> list = Arrays.asList("dromara", "hutool", "sweet");
List<String> mapIndex = FastStream.of(list).flatMapIdx((e, i) -> FastStream.of(i + 1 + "." + e)).toList();
List<String> mapIndex = EasyStream.of(list).flatMapIdx((e, i) -> EasyStream.of(i + 1 + "." + e)).toList();
Assert.assertEquals(Arrays.asList("1.dromara", "2.hutool", "3.sweet"), mapIndex);
// 并行流时为-1
Assert.assertEquals(Arrays.asList(-1, -1, -1), FastStream.of(1, 2, 3).parallel().flatMapIdx((e, i) -> FastStream.of(i)).toList());
Assert.assertEquals(Arrays.asList(-1, -1, -1), EasyStream.of(1, 2, 3).parallel().flatMapIdx((e, i) -> EasyStream.of(i)).toList());
}
@Test
@ -208,172 +208,172 @@ public class FastStreamTest {
List<Integer> list = Arrays.asList(1, 2, 3);
// 一个元素 扩散为 多个元素(迭代器)
List<Integer> flat = FastStream.of(list).flat(e -> Arrays.asList(e, e * 10)).toList();
List<Integer> flat = EasyStream.of(list).flat(e -> Arrays.asList(e, e * 10)).toList();
Assert.assertEquals(ListUtil.of(1, 10, 2, 20, 3, 30), flat);
// 过滤迭代器为null的元素
flat = FastStream.of(list).<Integer>flat(e -> null).toList();
flat = EasyStream.of(list).<Integer>flat(e -> null).toList();
Assert.assertEquals(Collections.emptyList(), flat);
// 自动过滤null元素
flat = FastStream.of(list).flat(e -> Arrays.asList(e, e > 2 ? e : null)).toList();
flat = EasyStream.of(list).flat(e -> Arrays.asList(e, e > 2 ? e : null)).toList();
Assert.assertEquals(ListUtil.of(1, null, 2, null, 3, 3), flat);
// 不报npe测试
Assert.assertTrue(FastStream.of(list).flat(e -> null).isEmpty());
Assert.assertTrue(EasyStream.of(list).flat(e -> null).isEmpty());
}
@Test
public void testFilter() {
List<Integer> list = Arrays.asList(1, 2, 3);
List<Integer> filterIndex = FastStream.of(list).filter(String::valueOf, "1").toList();
List<Integer> filterIndex = EasyStream.of(list).filter(String::valueOf, "1").toList();
Assert.assertEquals(Collections.singletonList(1), filterIndex);
}
@Test
public void testFilterIdx() {
List<String> list = Arrays.asList("dromara", "hutool", "sweet");
List<String> filterIndex = FastStream.of(list).filterIdx((e, i) -> i < 2).toList();
List<String> filterIndex = EasyStream.of(list).filterIdx((e, i) -> i < 2).toList();
Assert.assertEquals(Arrays.asList("dromara", "hutool"), filterIndex);
// 并行流时为-1
Assert.assertEquals(3L, FastStream.of(1, 2, 3).parallel().filterIdx((e, i) -> i == -1).count());
Assert.assertEquals(3L, EasyStream.of(1, 2, 3).parallel().filterIdx((e, i) -> i == -1).count());
}
@Test
public void testNonNull() {
List<Integer> list = Arrays.asList(1, null, 2, 3);
List<Integer> nonNull = FastStream.of(list).nonNull().toList();
List<Integer> nonNull = EasyStream.of(list).nonNull().toList();
Assert.assertEquals(Arrays.asList(1, 2, 3), nonNull);
}
@Test
public void testParallel() {
Assert.assertTrue(FastStream.of(1, 2, 3).parallel(true).isParallel());
Assert.assertFalse(FastStream.of(1, 2, 3).parallel(false).isParallel());
Assert.assertTrue(EasyStream.of(1, 2, 3).parallel(true).isParallel());
Assert.assertFalse(EasyStream.of(1, 2, 3).parallel(false).isParallel());
}
@Test
public void testPush() {
List<Integer> list = Arrays.asList(1, 2);
List<Integer> push = FastStream.of(list).push(3).toList();
List<Integer> push = EasyStream.of(list).push(3).toList();
Assert.assertEquals(Arrays.asList(1, 2, 3), push);
Assert.assertEquals(Arrays.asList(1, 2, 3, 4), FastStream.of(list).push(3, 4).toList());
Assert.assertEquals(Arrays.asList(1, 2, 3, 4), EasyStream.of(list).push(3, 4).toList());
}
@Test
public void testUnshift() {
List<Integer> list = Arrays.asList(2, 3);
List<Integer> unshift = FastStream.of(list).unshift(1).toList();
List<Integer> unshift = EasyStream.of(list).unshift(1).toList();
Assert.assertEquals(Arrays.asList(1, 2, 3), unshift);
Assert.assertEquals(Arrays.asList(1, 2, 2, 3), FastStream.of(list).unshift(1, 2).toList());
Assert.assertEquals(Arrays.asList(1, 2, 2, 3), EasyStream.of(list).unshift(1, 2).toList());
}
@Test
public void testAt() {
List<Integer> list = Arrays.asList(1, 2, 3);
Assert.assertEquals(1, (Object) FastStream.of(list).at(0).orElse(null));
Assert.assertEquals(2, (Object) FastStream.of(list).at(1).orElse(null));
Assert.assertEquals(3, (Object) FastStream.of(list).at(2).orElse(null));
Assert.assertEquals(1, (Object) FastStream.of(list).at(-3).orElse(null));
Assert.assertEquals(3, (Object) FastStream.of(list).at(-1).orElse(null));
Assert.assertNull(FastStream.of(list).at(-4).orElse(null));
Assert.assertEquals(1, (Object) EasyStream.of(list).at(0).orElse(null));
Assert.assertEquals(2, (Object) EasyStream.of(list).at(1).orElse(null));
Assert.assertEquals(3, (Object) EasyStream.of(list).at(2).orElse(null));
Assert.assertEquals(1, (Object) EasyStream.of(list).at(-3).orElse(null));
Assert.assertEquals(3, (Object) EasyStream.of(list).at(-1).orElse(null));
Assert.assertNull(EasyStream.of(list).at(-4).orElse(null));
}
@Test
public void testSplice() {
List<Integer> list = Arrays.asList(1, 2, 3);
Assert.assertEquals(Arrays.asList(1, 2, 2, 3), FastStream.of(list).splice(1, 0, 2).toList());
Assert.assertEquals(Arrays.asList(1, 2, 3, 3), FastStream.of(list).splice(3, 1, 3).toList());
Assert.assertEquals(Arrays.asList(1, 2, 4), FastStream.of(list).splice(2, 1, 4).toList());
Assert.assertEquals(Arrays.asList(1, 2), FastStream.of(list).splice(2, 1).toList());
Assert.assertEquals(Arrays.asList(1, 2, 3), FastStream.of(list).splice(2, 0).toList());
Assert.assertEquals(Arrays.asList(1, 2), FastStream.of(list).splice(-1, 1).toList());
Assert.assertEquals(Arrays.asList(1, 2, 3), FastStream.of(list).splice(-2, 2, 2, 3).toList());
Assert.assertEquals(Arrays.asList(1, 2, 2, 3), EasyStream.of(list).splice(1, 0, 2).toList());
Assert.assertEquals(Arrays.asList(1, 2, 3, 3), EasyStream.of(list).splice(3, 1, 3).toList());
Assert.assertEquals(Arrays.asList(1, 2, 4), EasyStream.of(list).splice(2, 1, 4).toList());
Assert.assertEquals(Arrays.asList(1, 2), EasyStream.of(list).splice(2, 1).toList());
Assert.assertEquals(Arrays.asList(1, 2, 3), EasyStream.of(list).splice(2, 0).toList());
Assert.assertEquals(Arrays.asList(1, 2), EasyStream.of(list).splice(-1, 1).toList());
Assert.assertEquals(Arrays.asList(1, 2, 3), EasyStream.of(list).splice(-2, 2, 2, 3).toList());
}
@Test
public void testFindFirst() {
List<Integer> list = Arrays.asList(1, 2, 3);
Integer find = FastStream.of(list).findFirst(Objects::nonNull).orElse(null);
Integer find = EasyStream.of(list).findFirst(Objects::nonNull).orElse(null);
Assert.assertEquals(1, (Object) find);
}
@Test
public void testFindFirstIdx() {
List<Integer> list = Arrays.asList(null, 2, 3);
Assert.assertEquals(1, FastStream.of(list).findFirstIdx(Objects::nonNull));
Assert.assertEquals(-1, (Object) FastStream.of(list).parallel().findFirstIdx(Objects::nonNull));
Assert.assertEquals(1, EasyStream.of(list).findFirstIdx(Objects::nonNull));
Assert.assertEquals(-1, (Object) EasyStream.of(list).parallel().findFirstIdx(Objects::nonNull));
}
@Test
public void testFindLast() {
List<Integer> list = ListUtil.of(1, 2, 4, 5, 6, 7, 8, 9, 10, 3);
Assert.assertEquals(3, (Object) FastStream.of(list).findLast().orElse(null));
Assert.assertEquals(3, (Object) FastStream.of(list).parallel().findLast().orElse(null));
Assert.assertEquals(3, (Object) EasyStream.of(list).findLast().orElse(null));
Assert.assertEquals(3, (Object) EasyStream.of(list).parallel().findLast().orElse(null));
List<Integer> list2 = ListUtil.of(1, 2, 4, 5, 6, 7, 8, 9, 10, 3, null);
Assert.assertEquals(3, (Object) FastStream.of(list2).parallel().findLast(Objects::nonNull).orElse(null));
Assert.assertEquals(3, (Object) EasyStream.of(list2).parallel().findLast(Objects::nonNull).orElse(null));
Assert.assertNull(FastStream.of().parallel().findLast(Objects::nonNull).orElse(null));
Assert.assertNull(FastStream.of((Object) null).parallel().findLast(Objects::nonNull).orElse(null));
Assert.assertNull(EasyStream.of().parallel().findLast(Objects::nonNull).orElse(null));
Assert.assertNull(EasyStream.of((Object) null).parallel().findLast(Objects::nonNull).orElse(null));
}
@Test
public void testFindLastIdx() {
List<Integer> list = Arrays.asList(1, null, 3);
Assert.assertEquals(2, (Object) FastStream.of(list).findLastIdx(Objects::nonNull));
Assert.assertEquals(-1, (Object) FastStream.of(list).parallel().findLastIdx(Objects::nonNull));
Assert.assertEquals(2, (Object) EasyStream.of(list).findLastIdx(Objects::nonNull));
Assert.assertEquals(-1, (Object) EasyStream.of(list).parallel().findLastIdx(Objects::nonNull));
}
@Test
public void testReverse() {
final List<Integer> list = ListUtil.of(Stream.iterate(1, i -> i + 1).limit(1000).collect(Collectors.toList()));
Assert.assertEquals(ListUtil.reverseNew(list), FastStream.of(list).reverse().toList());
Assert.assertEquals(ListUtil.empty(), FastStream.of().reverse().toList());
Assert.assertEquals(ListUtil.of((Object) null), FastStream.of((Object) null).reverse().toList());
Assert.assertEquals(ListUtil.reverseNew(list), EasyStream.of(list).reverse().toList());
Assert.assertEquals(ListUtil.empty(), EasyStream.of().reverse().toList());
Assert.assertEquals(ListUtil.of((Object) null), EasyStream.of((Object) null).reverse().toList());
}
@Test
public void testZip() {
List<Integer> orders = Arrays.asList(1, 2, 3);
List<String> list = Arrays.asList("dromara", "hutool", "sweet");
List<String> zip = FastStream.of(orders).zip(list, (e1, e2) -> e1 + "." + e2).toList();
List<String> zip = EasyStream.of(orders).zip(list, (e1, e2) -> e1 + "." + e2).toList();
Assert.assertEquals(Arrays.asList("1.dromara", "2.hutool", "3.sweet"), zip);
zip = FastStream.iterate(1, i -> i + 1).zip(list, (e1, e2) -> e1 + "." + e2).toList();
zip = EasyStream.iterate(1, i -> i + 1).zip(list, (e1, e2) -> e1 + "." + e2).toList();
Assert.assertEquals(Arrays.asList("1.dromara", "2.hutool", "3.sweet"), zip);
}
@Test
public void testListSplit() {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
List<List<Integer>> lists = FastStream.of(list).split(2).map(FastStream::toList).toList();
List<List<Integer>> lists = EasyStream.of(list).split(2).map(EasyStream::toList).toList();
Assert.assertEquals(ListUtil.split(list, 2), lists);
// 指定长度 大于等于 列表长度
lists = FastStream.of(list).split(list.size()).map(FastStream::toList).toList();
lists = EasyStream.of(list).split(list.size()).map(EasyStream::toList).toList();
Assert.assertEquals(singletonList(list), lists);
}
@Test
public void testSplitList() {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
List<List<Integer>> lists = FastStream.of(list).splitList(2).toList();
List<List<Integer>> lists = EasyStream.of(list).splitList(2).toList();
Assert.assertEquals(ListUtil.split(list, 2), lists);
// 指定长度 大于等于 列表长度
lists = FastStream.of(list).splitList(list.size()).toList();
lists = EasyStream.of(list).splitList(list.size()).toList();
Assert.assertEquals(singletonList(list), lists);
}
@Test
public void testTakeWhile() {
// 1 10
final List<Integer> list = FastStream.iterate(1, i -> i <= 10, i -> i + 1).toList();
final List<Integer> list = EasyStream.iterate(1, i -> i <= 10, i -> i + 1).toList();
final List<String> res1 = FastStream.of(list)
final List<String> res1 = EasyStream.of(list)
// 舍弃 5
.takeWhile(e -> e < 5)
// 过滤奇数
@ -384,7 +384,7 @@ public class FastStreamTest {
.toList();
Assert.assertEquals(Arrays.asList("4", "2"), res1);
final List<Integer> res2 = FastStream.iterate(1, i -> i + 1)
final List<Integer> res2 = EasyStream.iterate(1, i -> i + 1)
.parallel()
.takeWhile(e -> e < 5)
.map(String::valueOf)
@ -397,9 +397,9 @@ public class FastStreamTest {
@Test
public void testDropWhile() {
// 1 10
final List<Integer> list = FastStream.iterate(1, i -> i <= 10, i -> i + 1).toList();
final List<Integer> list = EasyStream.iterate(1, i -> i <= 10, i -> i + 1).toList();
final List<String> res1 = FastStream.of(list)
final List<String> res1 = EasyStream.of(list)
// 舍弃 5之前的数字
.dropWhile(e -> e < 5)
// 过滤偶数
@ -410,7 +410,7 @@ public class FastStreamTest {
.toList();
Assert.assertEquals(Arrays.asList("9", "7", "5"), res1);
final List<Integer> res2 = FastStream.of(list)
final List<Integer> res2 = EasyStream.of(list)
.parallel()
.dropWhile(e -> e < 5)
// 过滤偶数
@ -424,7 +424,7 @@ public class FastStreamTest {
@Test
public void testIsNotEmpty() {
Assert.assertTrue(FastStream.of(1).isNotEmpty());
Assert.assertTrue(EasyStream.of(1).isNotEmpty());
}
}