From 238898e7084681ab8dc68fb1b0aff9fa4b2f36c6 Mon Sep 17 00:00:00 2001 From: VampireAchao Date: Mon, 7 Feb 2022 22:03:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BF=98=E8=AE=B0=E5=8A=A0=E5=8D=95=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E5=88=86=E7=BB=84=E9=87=8D=E8=BD=BD=E4=BA=86...?= =?UTF-8?q?=E5=A4=B1=E8=AF=AF=E5=A4=B1=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/core/stream/CollectorUtil.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) 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