mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
fix code
This commit is contained in:
parent
d1a5818a8e
commit
c72e2bb5ba
@ -24,7 +24,7 @@ public class CollectorUtil {
|
|||||||
* 说明已包含IDENTITY_FINISH特征 为 Characteristics.IDENTITY_FINISH 的缩写
|
* 说明已包含IDENTITY_FINISH特征 为 Characteristics.IDENTITY_FINISH 的缩写
|
||||||
*/
|
*/
|
||||||
public static final Set<Collector.Characteristics> CH_ID
|
public static final Set<Collector.Characteristics> CH_ID
|
||||||
= Collections.unmodifiableSet(EnumSet.of(Collector.Characteristics.IDENTITY_FINISH));
|
= Collections.unmodifiableSet(EnumSet.of(Collector.Characteristics.IDENTITY_FINISH));
|
||||||
/**
|
/**
|
||||||
* 说明不包含IDENTITY_FINISH特征
|
* 说明不包含IDENTITY_FINISH特征
|
||||||
*/
|
*/
|
||||||
@ -50,7 +50,7 @@ public class CollectorUtil {
|
|||||||
* @return {@link Collector}
|
* @return {@link Collector}
|
||||||
*/
|
*/
|
||||||
public static <T> Collector<T, ?, String> joining(final CharSequence delimiter,
|
public static <T> Collector<T, ?, String> joining(final CharSequence delimiter,
|
||||||
final Function<T, ? extends CharSequence> toStringFunc) {
|
final Function<T, ? extends CharSequence> toStringFunc) {
|
||||||
return joining(delimiter, StrUtil.EMPTY, StrUtil.EMPTY, toStringFunc);
|
return joining(delimiter, StrUtil.EMPTY, StrUtil.EMPTY, toStringFunc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,15 +65,15 @@ public class CollectorUtil {
|
|||||||
* @return {@link Collector}
|
* @return {@link Collector}
|
||||||
*/
|
*/
|
||||||
public static <T> Collector<T, ?, String> joining(final CharSequence delimiter,
|
public static <T> Collector<T, ?, String> joining(final CharSequence delimiter,
|
||||||
final CharSequence prefix,
|
final CharSequence prefix,
|
||||||
final CharSequence suffix,
|
final CharSequence suffix,
|
||||||
final Function<T, ? extends CharSequence> toStringFunc) {
|
final Function<T, ? extends CharSequence> toStringFunc) {
|
||||||
return new SimpleCollector<>(
|
return new SimpleCollector<>(
|
||||||
() -> new StringJoiner(delimiter, prefix, suffix),
|
() -> new StringJoiner(delimiter, prefix, suffix),
|
||||||
(joiner, ele) -> joiner.add(toStringFunc.apply(ele)),
|
(joiner, ele) -> joiner.add(toStringFunc.apply(ele)),
|
||||||
StringJoiner::merge,
|
StringJoiner::merge,
|
||||||
StringJoiner::toString,
|
StringJoiner::toString,
|
||||||
Collections.emptySet()
|
Collections.emptySet()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,8 +92,8 @@ public class CollectorUtil {
|
|||||||
* @return {@link Collector}
|
* @return {@link Collector}
|
||||||
*/
|
*/
|
||||||
public static <T, K, D, A, M extends Map<K, D>> Collector<T, ?, M> groupingBy(final Function<? super T, ? extends K> classifier,
|
public static <T, K, D, A, M extends Map<K, D>> Collector<T, ?, M> groupingBy(final Function<? super T, ? extends K> classifier,
|
||||||
final Supplier<M> mapFactory,
|
final Supplier<M> mapFactory,
|
||||||
final Collector<? super T, A, D> downstream) {
|
final Collector<? super T, A, D> downstream) {
|
||||||
final Supplier<A> downstreamSupplier = downstream.supplier();
|
final Supplier<A> downstreamSupplier = downstream.supplier();
|
||||||
final BiConsumer<A, ? super T> downstreamAccumulator = downstream.accumulator();
|
final BiConsumer<A, ? super T> downstreamAccumulator = downstream.accumulator();
|
||||||
final BiConsumer<Map<K, A>, T> accumulator = (m, t) -> {
|
final BiConsumer<Map<K, A>, T> accumulator = (m, t) -> {
|
||||||
@ -131,9 +131,8 @@ public class CollectorUtil {
|
|||||||
* @param <A> 下游操作在进行中间操作时对应类型
|
* @param <A> 下游操作在进行中间操作时对应类型
|
||||||
* @return {@link Collector}
|
* @return {@link Collector}
|
||||||
*/
|
*/
|
||||||
public static <T, K, A, D>
|
public static <T, K, A, D> Collector<T, ?, Map<K, D>> groupingBy(final Function<? super T, ? extends K> classifier,
|
||||||
Collector<T, ?, Map<K, D>> groupingBy(final Function<? super T, ? extends K> classifier,
|
final Collector<? super T, A, D> downstream) {
|
||||||
final Collector<? super T, A, D> downstream) {
|
|
||||||
return groupingBy(classifier, HashMap::new, downstream);
|
return groupingBy(classifier, HashMap::new, downstream);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,8 +144,7 @@ public class CollectorUtil {
|
|||||||
* @param <K> 实体中的分组依据对应类型,也是Map中key的类型
|
* @param <K> 实体中的分组依据对应类型,也是Map中key的类型
|
||||||
* @return {@link Collector}
|
* @return {@link Collector}
|
||||||
*/
|
*/
|
||||||
public static <T, K> Collector<T, ?, Map<K, List<T>>>
|
public static <T, K> Collector<T, ?, Map<K, List<T>>> groupingBy(final Function<? super T, ? extends K> classifier) {
|
||||||
groupingBy(final Function<? super T, ? extends K> classifier) {
|
|
||||||
return groupingBy(classifier, Collectors.toList());
|
return groupingBy(classifier, Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,10 +159,9 @@ public class CollectorUtil {
|
|||||||
* @param <U> map中value的类型
|
* @param <U> map中value的类型
|
||||||
* @return 对null友好的 toMap 操作的 {@link Collector}实现
|
* @return 对null友好的 toMap 操作的 {@link Collector}实现
|
||||||
*/
|
*/
|
||||||
public static <T, K, U>
|
public static <T, K, U> Collector<T, ?, Map<K, U>> toMap(final Function<? super T, ? extends K> keyMapper,
|
||||||
Collector<T, ?, Map<K, U>> toMap(final Function<? super T, ? extends K> keyMapper,
|
final Function<? super T, ? extends U> valueMapper,
|
||||||
final Function<? super T, ? extends U> valueMapper,
|
final BinaryOperator<U> mergeFunction) {
|
||||||
final BinaryOperator<U> mergeFunction) {
|
|
||||||
return toMap(keyMapper, valueMapper, mergeFunction, HashMap::new);
|
return toMap(keyMapper, valueMapper, mergeFunction, HashMap::new);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,11 +180,11 @@ public class CollectorUtil {
|
|||||||
*/
|
*/
|
||||||
public static <T, K, U, M extends Map<K, U>>
|
public static <T, K, U, M extends Map<K, U>>
|
||||||
Collector<T, ?, M> toMap(final Function<? super T, ? extends K> keyMapper,
|
Collector<T, ?, M> toMap(final Function<? super T, ? extends K> keyMapper,
|
||||||
final Function<? super T, ? extends U> valueMapper,
|
final Function<? super T, ? extends U> valueMapper,
|
||||||
final BinaryOperator<U> mergeFunction,
|
final BinaryOperator<U> mergeFunction,
|
||||||
final Supplier<M> mapSupplier) {
|
final Supplier<M> mapSupplier) {
|
||||||
final BiConsumer<M, T> accumulator
|
final BiConsumer<M, T> accumulator
|
||||||
= (map, element) -> map.put(Opt.ofNullable(element).map(keyMapper).get(), Opt.ofNullable(element).map(valueMapper).get());
|
= (map, element) -> map.put(Opt.ofNullable(element).map(keyMapper).get(), Opt.ofNullable(element).map(valueMapper).get());
|
||||||
return new SimpleCollector<>(mapSupplier, accumulator, mapMerger(mergeFunction), CH_ID);
|
return new SimpleCollector<>(mapSupplier, accumulator, mapMerger(mergeFunction), CH_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -233,13 +230,13 @@ public class CollectorUtil {
|
|||||||
*/
|
*/
|
||||||
public static <K, V, R extends Map<K, List<V>>> Collector<Map<K, V>, ?, R> reduceListMap(final Supplier<R> mapSupplier) {
|
public static <K, V, R extends Map<K, List<V>>> Collector<Map<K, V>, ?, R> reduceListMap(final Supplier<R> mapSupplier) {
|
||||||
return Collectors.reducing(mapSupplier.get(), value -> {
|
return Collectors.reducing(mapSupplier.get(), value -> {
|
||||||
R result = mapSupplier.get();
|
final R result = mapSupplier.get();
|
||||||
value.forEach((k, v) -> result.computeIfAbsent(k, i -> new ArrayList<>()).add(v));
|
value.forEach((k, v) -> result.computeIfAbsent(k, i -> new ArrayList<>()).add(v));
|
||||||
return result;
|
return result;
|
||||||
}, (l, r) -> {
|
}, (l, r) -> {
|
||||||
r.forEach((k, v) -> l.computeIfAbsent(k, i -> new ArrayList<>()).addAll(v));
|
r.forEach((k, v) -> l.computeIfAbsent(k, i -> new ArrayList<>()).addAll(v));
|
||||||
return l;
|
return l;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -254,7 +251,7 @@ public class CollectorUtil {
|
|||||||
* @return 收集器
|
* @return 收集器
|
||||||
*/
|
*/
|
||||||
public static <T, K, V> Collector<T, List<T>, EntryStream<K, V>> toEntryStream(
|
public static <T, K, V> Collector<T, List<T>, EntryStream<K, V>> toEntryStream(
|
||||||
Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends V> valueMapper) {
|
final Function<? super T, ? extends K> keyMapper, final Function<? super T, ? extends V> valueMapper) {
|
||||||
Objects.requireNonNull(keyMapper);
|
Objects.requireNonNull(keyMapper);
|
||||||
Objects.requireNonNull(valueMapper);
|
Objects.requireNonNull(valueMapper);
|
||||||
return transform(ArrayList::new, list -> EntryStream.of(list, keyMapper, valueMapper));
|
return transform(ArrayList::new, list -> EntryStream.of(list, keyMapper, valueMapper));
|
||||||
@ -287,11 +284,14 @@ public class CollectorUtil {
|
|||||||
* @return 收集器
|
* @return 收集器
|
||||||
*/
|
*/
|
||||||
public static <T, R, C extends Collection<T>> Collector<T, C, R> transform(
|
public static <T, R, C extends Collection<T>> Collector<T, C, R> transform(
|
||||||
Supplier<C> collFactory, Function<C, R> mapper) {
|
final Supplier<C> collFactory, final Function<C, R> mapper) {
|
||||||
Objects.requireNonNull(collFactory);
|
Objects.requireNonNull(collFactory);
|
||||||
Objects.requireNonNull(mapper);
|
Objects.requireNonNull(mapper);
|
||||||
return new SimpleCollector<>(
|
return new SimpleCollector<>(
|
||||||
collFactory, C::add, (l1, l2) -> { l1.addAll(l2); return l1; }, mapper, CH_NOID
|
collFactory, C::add, (l1, l2) -> {
|
||||||
|
l1.addAll(l2);
|
||||||
|
return l1;
|
||||||
|
}, mapper, CH_NOID
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -309,7 +309,7 @@ public class CollectorUtil {
|
|||||||
* @param <T> 输入元素类型
|
* @param <T> 输入元素类型
|
||||||
* @return 收集器
|
* @return 收集器
|
||||||
*/
|
*/
|
||||||
public static <T, R> Collector<T, List<T>, R> transform(Function<List<T>, R> mapper) {
|
public static <T, R> Collector<T, List<T>, R> transform(final Function<List<T>, R> mapper) {
|
||||||
return transform(ArrayList::new, mapper);
|
return transform(ArrayList::new, mapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -462,6 +462,7 @@ public class EasyStream<T> extends StreamWrapper<T, EasyStream<T>> implements St
|
|||||||
/**
|
/**
|
||||||
* 返回与指定函数将元素作为参数执行后组成的流。操作带下标,并行流时下标永远为-1
|
* 返回与指定函数将元素作为参数执行后组成的流。操作带下标,并行流时下标永远为-1
|
||||||
* 这是一个无状态中间操作
|
* 这是一个无状态中间操作
|
||||||
|
*
|
||||||
* @param action 指定的函数
|
* @param action 指定的函数
|
||||||
* @return 返回叠加操作后的FastStream
|
* @return 返回叠加操作后的FastStream
|
||||||
* @apiNote 该方法存在的意义主要是用来调试
|
* @apiNote 该方法存在的意义主要是用来调试
|
||||||
@ -475,12 +476,12 @@ public class EasyStream<T> extends StreamWrapper<T, EasyStream<T>> implements St
|
|||||||
* .collect(Collectors.toList());
|
* .collect(Collectors.toList());
|
||||||
* }</pre>
|
* }</pre>
|
||||||
*/
|
*/
|
||||||
public EasyStream<T> peekIdx(BiConsumer<? super T, Integer> action) {
|
public EasyStream<T> peekIdx(final BiConsumer<? super T, Integer> action) {
|
||||||
Objects.requireNonNull(action);
|
Objects.requireNonNull(action);
|
||||||
if (isParallel()) {
|
if (isParallel()) {
|
||||||
return peek(e -> action.accept(e, NOT_FOUND_INDEX));
|
return peek(e -> action.accept(e, NOT_FOUND_INDEX));
|
||||||
} else {
|
} else {
|
||||||
AtomicInteger index = new AtomicInteger(NOT_FOUND_INDEX);
|
final AtomicInteger index = new AtomicInteger(NOT_FOUND_INDEX);
|
||||||
return peek(e -> action.accept(e, index.incrementAndGet()));
|
return peek(e -> action.accept(e, index.incrementAndGet()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -688,7 +689,7 @@ public class EasyStream<T> extends StreamWrapper<T, EasyStream<T>> implements St
|
|||||||
* @return 实现类
|
* @return 实现类
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected EasyStream<T> convertToStreamImpl(Stream<T> stream) {
|
protected EasyStream<T> convertToStreamImpl(final Stream<T> stream) {
|
||||||
return new EasyStream<>(stream);
|
return new EasyStream<>(stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -852,10 +853,10 @@ public class EasyStream<T> extends StreamWrapper<T, EasyStream<T>> implements St
|
|||||||
* eg:
|
* eg:
|
||||||
* {@code List studentTree = EasyStream.of(students).toTree(Student::getId, Student::getParentId, Student::setChildren) }
|
* {@code List studentTree = EasyStream.of(students).toTree(Student::getId, Student::getParentId, Student::setChildren) }
|
||||||
*/
|
*/
|
||||||
public <R extends Comparable<R>> List<T> toTree(Function<T, R> idGetter,
|
public <R extends Comparable<R>> List<T> toTree(final Function<T, R> idGetter,
|
||||||
Function<T, R> pIdGetter,
|
final Function<T, R> pIdGetter,
|
||||||
BiConsumer<T, List<T>> childrenSetter) {
|
final BiConsumer<T, List<T>> childrenSetter) {
|
||||||
Map<R, List<T>> pIdValuesMap = group(pIdGetter);
|
final Map<R, List<T>> pIdValuesMap = group(pIdGetter);
|
||||||
return getChildrenFromMapByPidAndSet(idGetter, childrenSetter, pIdValuesMap, pIdValuesMap.get(null));
|
return getChildrenFromMapByPidAndSet(idGetter, childrenSetter, pIdValuesMap, pIdValuesMap.get(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -873,12 +874,12 @@ public class EasyStream<T> extends StreamWrapper<T, EasyStream<T>> implements St
|
|||||||
* {@code List studentTree = EasyStream.of(students).toTree(Student::getId, Student::getParentId, Student::setChildren, Student::getMatchParent) }
|
* {@code List studentTree = EasyStream.of(students).toTree(Student::getId, Student::getParentId, Student::setChildren, Student::getMatchParent) }
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public <R extends Comparable<R>> List<T> toTree(Function<T, R> idGetter,
|
public <R extends Comparable<R>> List<T> toTree(final Function<T, R> idGetter,
|
||||||
Function<T, R> pIdGetter,
|
final Function<T, R> pIdGetter,
|
||||||
BiConsumer<T, List<T>> childrenSetter,
|
final BiConsumer<T, List<T>> childrenSetter,
|
||||||
Predicate<T> parentPredicate) {
|
final Predicate<T> parentPredicate) {
|
||||||
List<T> list = toList();
|
final List<T> list = toList();
|
||||||
List<T> parents = EasyStream.of(list).filter(e ->
|
final List<T> parents = EasyStream.of(list).filter(e ->
|
||||||
// 此处是为了适配 parentPredicate.test空指针 情况
|
// 此处是为了适配 parentPredicate.test空指针 情况
|
||||||
// 因为Predicate.test的返回值是boolean,所以如果 e -> null 这种返回null的情况,会直接抛出NPE
|
// 因为Predicate.test的返回值是boolean,所以如果 e -> null 这种返回null的情况,会直接抛出NPE
|
||||||
Opt.ofTry(() -> parentPredicate.test(e)).filter(Boolean::booleanValue).isPresent())
|
Opt.ofTry(() -> parentPredicate.test(e)).filter(Boolean::booleanValue).isPresent())
|
||||||
@ -897,13 +898,13 @@ public class EasyStream<T> extends StreamWrapper<T, EasyStream<T>> implements St
|
|||||||
* @param <R> 此处是id的泛型限制
|
* @param <R> 此处是id的泛型限制
|
||||||
* @return list 组装好的树
|
* @return list 组装好的树
|
||||||
*/
|
*/
|
||||||
private <R extends Comparable<R>> List<T> getChildrenFromMapByPidAndSet(Function<T, R> idGetter,
|
private <R extends Comparable<R>> List<T> getChildrenFromMapByPidAndSet(final Function<T, R> idGetter,
|
||||||
BiConsumer<T, List<T>> childrenSetter,
|
final BiConsumer<T, List<T>> childrenSetter,
|
||||||
Map<R, List<T>> pIdValuesMap,
|
final Map<R, List<T>> pIdValuesMap,
|
||||||
List<T> parents) {
|
final List<T> parents) {
|
||||||
MutableObj<Consumer<List<T>>> recursiveRef = new MutableObj<>();
|
final MutableObj<Consumer<List<T>>> recursiveRef = new MutableObj<>();
|
||||||
Consumer<List<T>> recursive = values -> EasyStream.of(values, isParallel()).forEach(value -> {
|
final Consumer<List<T>> recursive = values -> EasyStream.of(values, isParallel()).forEach(value -> {
|
||||||
List<T> children = pIdValuesMap.get(idGetter.apply(value));
|
final List<T> children = pIdValuesMap.get(idGetter.apply(value));
|
||||||
childrenSetter.accept(value, children);
|
childrenSetter.accept(value, children);
|
||||||
recursiveRef.get().accept(children);
|
recursiveRef.get().accept(children);
|
||||||
});
|
});
|
||||||
@ -922,9 +923,9 @@ public class EasyStream<T> extends StreamWrapper<T, EasyStream<T>> implements St
|
|||||||
* eg:
|
* eg:
|
||||||
* {@code List students = EasyStream.of(studentTree).flatTree(Student::getChildren, Student::setChildren).toList() }
|
* {@code List students = EasyStream.of(studentTree).flatTree(Student::getChildren, Student::setChildren).toList() }
|
||||||
*/
|
*/
|
||||||
public EasyStream<T> flatTree(Function<T, List<T>> childrenGetter, BiConsumer<T, List<T>> childrenSetter) {
|
public EasyStream<T> flatTree(final Function<T, List<T>> childrenGetter, final BiConsumer<T, List<T>> childrenSetter) {
|
||||||
MutableObj<Function<T, EasyStream<T>>> recursiveRef = new MutableObj<>();
|
final MutableObj<Function<T, EasyStream<T>>> recursiveRef = new MutableObj<>();
|
||||||
Function<T, EasyStream<T>> recursive = e -> EasyStream.of(childrenGetter.apply(e)).flat(recursiveRef.get()).unshift(e);
|
final Function<T, EasyStream<T>> recursive = e -> EasyStream.of(childrenGetter.apply(e)).flat(recursiveRef.get()).unshift(e);
|
||||||
recursiveRef.set(recursive);
|
recursiveRef.set(recursive);
|
||||||
return flat(recursive).peek(e -> childrenSetter.accept(e, null));
|
return flat(recursive).peek(e -> childrenSetter.accept(e, null));
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
*
|
*
|
||||||
* @param stream 包装的流对象
|
* @param stream 包装的流对象
|
||||||
*/
|
*/
|
||||||
protected StreamWrapper(Stream<T> stream) {
|
protected StreamWrapper(final Stream<T> stream) {
|
||||||
Objects.requireNonNull(stream, "stream must not null");
|
Objects.requireNonNull(stream, "stream must not null");
|
||||||
this.stream = stream;
|
this.stream = stream;
|
||||||
}
|
}
|
||||||
@ -35,7 +35,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @return 返回叠加过滤操作后的流
|
* @return 返回叠加过滤操作后的流
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public I filter(Predicate<? super T> predicate) {
|
public I filter(final Predicate<? super T> predicate) {
|
||||||
return convertToStreamImpl(stream.filter(predicate));
|
return convertToStreamImpl(stream.filter(predicate));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @return 叠加操作后元素类型全为int的流
|
* @return 叠加操作后元素类型全为int的流
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public IntStream mapToInt(ToIntFunction<? super T> mapper) {
|
public IntStream mapToInt(final ToIntFunction<? super T> mapper) {
|
||||||
return stream.mapToInt(mapper);
|
return stream.mapToInt(mapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @return 叠加操作后元素类型全为long的流
|
* @return 叠加操作后元素类型全为long的流
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public LongStream mapToLong(ToLongFunction<? super T> mapper) {
|
public LongStream mapToLong(final ToLongFunction<? super T> mapper) {
|
||||||
return stream.mapToLong(mapper);
|
return stream.mapToLong(mapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @return 叠加操作后元素类型全为double的流
|
* @return 叠加操作后元素类型全为double的流
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public DoubleStream mapToDouble(ToDoubleFunction<? super T> mapper) {
|
public DoubleStream mapToDouble(final ToDoubleFunction<? super T> mapper) {
|
||||||
return stream.mapToDouble(mapper);
|
return stream.mapToDouble(mapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @return 返回叠加拆分操作后的IntStream
|
* @return 返回叠加拆分操作后的IntStream
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public IntStream flatMapToInt(Function<? super T, ? extends IntStream> mapper) {
|
public IntStream flatMapToInt(final Function<? super T, ? extends IntStream> mapper) {
|
||||||
return stream.flatMapToInt(mapper);
|
return stream.flatMapToInt(mapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,7 +95,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @return 返回叠加拆分操作后的LongStream
|
* @return 返回叠加拆分操作后的LongStream
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public LongStream flatMapToLong(Function<? super T, ? extends LongStream> mapper) {
|
public LongStream flatMapToLong(final Function<? super T, ? extends LongStream> mapper) {
|
||||||
return stream.flatMapToLong(mapper);
|
return stream.flatMapToLong(mapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,7 +107,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @return 返回叠加拆分操作后的DoubleStream
|
* @return 返回叠加拆分操作后的DoubleStream
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public DoubleStream flatMapToDouble(Function<? super T, ? extends DoubleStream> mapper) {
|
public DoubleStream flatMapToDouble(final Function<? super T, ? extends DoubleStream> mapper) {
|
||||||
return stream.flatMapToDouble(mapper);
|
return stream.flatMapToDouble(mapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,7 +145,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @return 一个元素按指定的Comparator排序的流
|
* @return 一个元素按指定的Comparator排序的流
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public I sorted(Comparator<? super T> comparator) {
|
public I sorted(final Comparator<? super T> comparator) {
|
||||||
return convertToStreamImpl(stream.sorted(comparator));
|
return convertToStreamImpl(stream.sorted(comparator));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,7 +167,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* }</pre>
|
* }</pre>
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public I peek(Consumer<? super T> action) {
|
public I peek(final Consumer<? super T> action) {
|
||||||
return convertToStreamImpl(stream.peek(action));
|
return convertToStreamImpl(stream.peek(action));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,7 +179,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @return 截取后的流
|
* @return 截取后的流
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public I limit(long maxSize) {
|
public I limit(final long maxSize) {
|
||||||
return convertToStreamImpl(stream.limit(maxSize));
|
return convertToStreamImpl(stream.limit(maxSize));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,7 +191,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @return 丢弃前面n个元素后的剩余元素组成的流
|
* @return 丢弃前面n个元素后的剩余元素组成的流
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public I skip(long n) {
|
public I skip(final long n) {
|
||||||
return convertToStreamImpl(stream.skip(n));
|
return convertToStreamImpl(stream.skip(n));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -202,7 +202,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @param action 操作
|
* @param action 操作
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void forEach(Consumer<? super T> action) {
|
public void forEach(final Consumer<? super T> action) {
|
||||||
stream.forEach(action);
|
stream.forEach(action);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -213,7 +213,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @param action 操作
|
* @param action 操作
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void forEachOrdered(Consumer<? super T> action) {
|
public void forEachOrdered(final Consumer<? super T> action) {
|
||||||
stream.forEachOrdered(action);
|
stream.forEachOrdered(action);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -238,7 +238,8 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @throws ArrayStoreException 如果元素转换失败,例如不是该元素类型及其父类,则抛出该异常
|
* @throws ArrayStoreException 如果元素转换失败,例如不是该元素类型及其父类,则抛出该异常
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public <A> A[] toArray(IntFunction<A[]> generator) {
|
public <A> A[] toArray(final IntFunction<A[]> generator) {
|
||||||
|
//noinspection SuspiciousToArrayCall
|
||||||
return stream.toArray(generator);
|
return stream.toArray(generator);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -263,7 +264,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @return 聚合计算后的值
|
* @return 聚合计算后的值
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public T reduce(T identity, BinaryOperator<T> accumulator) {
|
public T reduce(final T identity, final BinaryOperator<T> accumulator) {
|
||||||
return stream.reduce(identity, accumulator);
|
return stream.reduce(identity, accumulator);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -298,7 +299,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @see #max(Comparator)
|
* @see #max(Comparator)
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Optional<T> reduce(BinaryOperator<T> accumulator) {
|
public Optional<T> reduce(final BinaryOperator<T> accumulator) {
|
||||||
return stream.reduce(accumulator);
|
return stream.reduce(accumulator);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -315,7 +316,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @see #reduce(Object, BinaryOperator)
|
* @see #reduce(Object, BinaryOperator)
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public <U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner) {
|
public <U> U reduce(final U identity, final BiFunction<U, ? super T, U> accumulator, final BinaryOperator<U> combiner) {
|
||||||
return stream.reduce(identity, accumulator, combiner);
|
return stream.reduce(identity, accumulator, combiner);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -333,7 +334,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* }</pre>
|
* }</pre>
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public <R> R collect(Supplier<R> supplier, BiConsumer<R, ? super T> accumulator, BiConsumer<R, R> combiner) {
|
public <R> R collect(final Supplier<R> supplier, final BiConsumer<R, ? super T> accumulator, final BiConsumer<R, R> combiner) {
|
||||||
return stream.collect(supplier, accumulator, combiner);
|
return stream.collect(supplier, accumulator, combiner);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -347,7 +348,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @return 收集后的容器
|
* @return 收集后的容器
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public <R, A> R collect(Collector<? super T, A, R> collector) {
|
public <R, A> R collect(final Collector<? super T, A, R> collector) {
|
||||||
return stream.collect(collector);
|
return stream.collect(collector);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -358,7 +359,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @return 最小值
|
* @return 最小值
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Optional<T> min(Comparator<? super T> comparator) {
|
public Optional<T> min(final Comparator<? super T> comparator) {
|
||||||
return stream.min(comparator);
|
return stream.min(comparator);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -369,7 +370,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @return 最大值
|
* @return 最大值
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Optional<T> max(Comparator<? super T> comparator) {
|
public Optional<T> max(final Comparator<? super T> comparator) {
|
||||||
return stream.max(comparator);
|
return stream.max(comparator);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -390,7 +391,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @return 是否有任何一个元素满足给定断言
|
* @return 是否有任何一个元素满足给定断言
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public boolean anyMatch(Predicate<? super T> predicate) {
|
public boolean anyMatch(final Predicate<? super T> predicate) {
|
||||||
return stream.anyMatch(predicate);
|
return stream.anyMatch(predicate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -401,7 +402,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @return 是否所有元素满足给定断言
|
* @return 是否所有元素满足给定断言
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public boolean allMatch(Predicate<? super T> predicate) {
|
public boolean allMatch(final Predicate<? super T> predicate) {
|
||||||
return stream.allMatch(predicate);
|
return stream.allMatch(predicate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -412,7 +413,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @return 是否没有元素满足给定断言
|
* @return 是否没有元素满足给定断言
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public boolean noneMatch(Predicate<? super T> predicate) {
|
public boolean noneMatch(final Predicate<? super T> predicate) {
|
||||||
return stream.noneMatch(predicate);
|
return stream.noneMatch(predicate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -504,7 +505,7 @@ abstract class StreamWrapper<T, I extends Stream<T>> implements Stream<T>, Itera
|
|||||||
* @return 流
|
* @return 流
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public I onClose(Runnable closeHandler) {
|
public I onClose(final Runnable closeHandler) {
|
||||||
return convertToStreamImpl(stream.onClose(closeHandler));
|
return convertToStreamImpl(stream.onClose(closeHandler));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,14 +47,14 @@ public class CollectorUtilTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testToEasyStream() {
|
public void testToEasyStream() {
|
||||||
Stream<Integer> stream =Stream.of(1, 2, 3, 4)
|
final Stream<Integer> stream =Stream.of(1, 2, 3, 4)
|
||||||
.collect(CollectorUtil.toEasyStream());
|
.collect(CollectorUtil.toEasyStream());
|
||||||
Assert.assertEquals(EasyStream.class, stream.getClass());
|
Assert.assertEquals(EasyStream.class, stream.getClass());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testToEntryStream() {
|
public void testToEntryStream() {
|
||||||
Map<String, Integer> map = Stream.of(1, 2, 3, 4, 5)
|
final Map<String, Integer> map = Stream.of(1, 2, 3, 4, 5)
|
||||||
// 转为EntryStream
|
// 转为EntryStream
|
||||||
.collect(CollectorUtil.toEntryStream(Function.identity(), String::valueOf))
|
.collect(CollectorUtil.toEntryStream(Function.identity(), String::valueOf))
|
||||||
// 过滤偶数
|
// 过滤偶数
|
||||||
|
@ -209,7 +209,7 @@ public class EasyStreamTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testPeek(){
|
public void testPeek() {
|
||||||
EasyStream.of("one", "two", "three", "four")
|
EasyStream.of("one", "two", "three", "four")
|
||||||
.filter(e -> e.length() == 4)
|
.filter(e -> e.length() == 4)
|
||||||
.peek(e -> Assert.assertEquals("four", e))
|
.peek(e -> Assert.assertEquals("four", e))
|
||||||
@ -219,12 +219,12 @@ public class EasyStreamTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testPeekIdx(){
|
public void testPeekIdx() {
|
||||||
EasyStream.of("one", "two", "three", "four")
|
EasyStream.of("one", "two", "three", "four")
|
||||||
.filter(e -> e.length() == 4)
|
.filter(e -> e.length() == 4)
|
||||||
.peekIdx((e,i) -> Assert.assertEquals("four:0", e + ":" + i))
|
.peekIdx((e, i) -> Assert.assertEquals("four:0", e + ":" + i))
|
||||||
.map(String::toUpperCase)
|
.map(String::toUpperCase)
|
||||||
.peekIdx((e,i) -> Assert.assertEquals("FOUR:0", e + ":" + i))
|
.peekIdx((e, i) -> Assert.assertEquals("FOUR:0", e + ":" + i))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -455,7 +455,7 @@ public class EasyStreamTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testToTree() {
|
public void testToTree() {
|
||||||
Consumer<Object> test = o -> {
|
Consumer<Object> test = o -> {
|
||||||
List<Student> studentTree = EasyStream
|
final List<Student> studentTree = EasyStream
|
||||||
.of(
|
.of(
|
||||||
Student.builder().id(1L).name("dromara").build(),
|
Student.builder().id(1L).name("dromara").build(),
|
||||||
Student.builder().id(2L).name("baomidou").build(),
|
Student.builder().id(2L).name("baomidou").build(),
|
||||||
@ -488,7 +488,7 @@ public class EasyStreamTest {
|
|||||||
), studentTree);
|
), studentTree);
|
||||||
};
|
};
|
||||||
test = test.andThen(o -> {
|
test = test.andThen(o -> {
|
||||||
List<Student> studentTree = EasyStream
|
final List<Student> studentTree = EasyStream
|
||||||
.of(
|
.of(
|
||||||
Student.builder().id(1L).name("dromara").matchParent(true).build(),
|
Student.builder().id(1L).name("dromara").matchParent(true).build(),
|
||||||
Student.builder().id(2L).name("baomidou").matchParent(true).build(),
|
Student.builder().id(2L).name("baomidou").matchParent(true).build(),
|
||||||
@ -525,7 +525,7 @@ public class EasyStreamTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testFlatTree() {
|
public void testFlatTree() {
|
||||||
List<Student> studentTree = asList(
|
final List<Student> studentTree = asList(
|
||||||
Student.builder().id(1L).name("dromara")
|
Student.builder().id(1L).name("dromara")
|
||||||
.children(asList(Student.builder().id(3L).name("hutool").parentId(1L)
|
.children(asList(Student.builder().id(3L).name("hutool").parentId(1L)
|
||||||
.children(singletonList(Student.builder().id(6L).name("looly").parentId(3L).build()))
|
.children(singletonList(Student.builder().id(6L).name("looly").parentId(3L).build()))
|
||||||
@ -575,9 +575,9 @@ public class EasyStreamTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testTransform() {
|
public void testTransform() {
|
||||||
final boolean result = EasyStream.of(1, 2, 3)
|
final boolean result = EasyStream.of(1, 2, 3)
|
||||||
.transform(EasyStream::toList)
|
.transform(EasyStream::toList)
|
||||||
.map(List::isEmpty)
|
.map(List::isEmpty)
|
||||||
.orElse(false);
|
.orElse(false);
|
||||||
Assert.assertFalse(result);
|
Assert.assertFalse(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user