diff --git a/hutool-core/src/main/java/cn/hutool/core/stream/CollectorUtil.java b/hutool-core/src/main/java/cn/hutool/core/stream/CollectorUtil.java index 82821897d..8e4001df4 100644 --- a/hutool-core/src/main/java/cn/hutool/core/stream/CollectorUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/stream/CollectorUtil.java @@ -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 downstreamFinisher = (Function) downstream.finisher(); + UnaryOperator downstreamFinisher = (UnaryOperator) downstream.finisher(); Function, 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 实体类型 + * @param 实体中的分组依据对应类型,也是Map中key的类型 + * @return {@link Collector} + */ + public static Collector>> + groupingBy(Function classifier) { + return groupingBy(classifier, Collectors.toList()); + } /** * 对null友好的 toMap 操作的 {@link Collector}实现,默认使用HashMap