!529 新增单参数CollectorUtil.groupingBy重载

Merge pull request !529 from 阿超/v5-dev
This commit is contained in:
Looly 2022-02-07 15:18:19 +00:00 committed by Gitee
commit 9b01a23a60
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F

View File

@ -8,12 +8,15 @@ import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.List;
import java.util.StringJoiner;
import java.util.function.BiConsumer;
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.function.UnaryOperator;
import java.util.stream.Collector;
import java.util.stream.Collectors;
/**
* 可变的汇聚操作{@link Collector} 相关工具封装
@ -111,8 +114,7 @@ public class CollectorUtil {
if (downstream.characteristics().contains(Collector.Characteristics.IDENTITY_FINISH)) {
return new SimpleCollector<>(mangledFactory, accumulator, merger, CH_ID);
} else {
@SuppressWarnings("unchecked")
Function<A, A> downstreamFinisher = (Function<A, A>) downstream.finisher();
UnaryOperator<A> downstreamFinisher = (UnaryOperator<A>) downstream.finisher();
Function<Map<K, A>, M> finisher = intermediate -> {
intermediate.replaceAll((k, v) -> downstreamFinisher.apply(v));
@SuppressWarnings("unchecked")
@ -140,6 +142,18 @@ public class CollectorUtil {
return groupingBy(classifier, HashMap::new, downstream);
}
/**
* 提供对null值友好的groupingBy操作的{@link Collector}实现
*
* @param classifier 分组依据
* @param <T> 实体类型
* @param <K> 实体中的分组依据对应类型也是Map中key的类型
* @return {@link Collector}
*/
public static <T, K> Collector<T, ?, Map<K, List<T>>>
groupingBy(Function<? super T, ? extends K> classifier) {
return groupingBy(classifier, Collectors.toList());
}
/**
* 对null友好的 toMap 操作的 {@link Collector}实现默认使用HashMap