From 9538041ac548f8588900ec4db819c39690dd00b7 Mon Sep 17 00:00:00 2001 From: achao Date: Sun, 3 Jul 2022 17:35:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86Collectors=E9=81=87=E5=88=B0n?= =?UTF-8?q?ull=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cn/hutool/core/stream/CollectorUtil.java | 7 ++++++- .../java/cn/hutool/core/collection/CollStreamUtilTest.java | 4 ++-- 2 files changed, 8 insertions(+), 3 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 1d264e744..28eb6b774 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 @@ -2,6 +2,7 @@ package cn.hutool.core.stream; import cn.hutool.core.lang.Opt; import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ArrayUtil; import java.util.Collections; import java.util.EnumSet; @@ -9,6 +10,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.List; +import java.util.Objects; import java.util.StringJoiner; import java.util.function.BiConsumer; import java.util.function.BinaryOperator; @@ -104,7 +106,10 @@ public class CollectorUtil { final BiConsumer, T> accumulator = (m, t) -> { final K key = Opt.ofNullable(t).map(classifier).orElse(null); final A container = m.computeIfAbsent(key, k -> downstreamSupplier.get()); - downstreamAccumulator.accept(container, t); + if (ArrayUtil.isArray(container) || Objects.nonNull(t)) { + // 如果是数组类型,不需要判空,场景——分组后需要使用:java.util.stream.Collectors.counting 求null元素个数 + downstreamAccumulator.accept(container, t); + } }; final BinaryOperator> merger = mapMerger(downstream.combiner()); @SuppressWarnings("unchecked") final Supplier> mangledFactory = (Supplier>) mapFactory; diff --git a/hutool-core/src/test/java/cn/hutool/core/collection/CollStreamUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/collection/CollStreamUtilTest.java index c1d5a2786..f3d1b883c 100644 --- a/hutool-core/src/test/java/cn/hutool/core/collection/CollStreamUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/collection/CollStreamUtilTest.java @@ -153,7 +153,7 @@ public class CollStreamUtilTest { // 对null友好 final Map> termIdClassIdStudentMap = CollStreamUtil.group2Map(Arrays.asList(null, new Student(2, 2, 1, "王五")), Student::getTermId, Student::getClassId); final Map> termIdClassIdStudentCompareMap = new HashMap>() {{ - put(null, MapUtil.of(null, null)); + put(null, MapUtil.empty()); put(2L, MapUtil.of(2L, new Student(2, 2, 1, "王五"))); }}; Assert.assertEquals(termIdClassIdStudentCompareMap, termIdClassIdStudentMap); @@ -215,7 +215,7 @@ public class CollStreamUtilTest { new Student(1, 2, 1, "李四")); final Map> termIdStudentsMap = CollStreamUtil.groupBy(students, Student::getTermId, Collectors.toList()); final Map> termIdStudentsCompareMap = new HashMap<>(); - termIdStudentsCompareMap.put(null, Arrays.asList(null, null)); + termIdStudentsCompareMap.put(null, Collections.emptyList()); termIdStudentsCompareMap.put(1L, Arrays.asList(new Student(1L, 1, 1, "张三"), new Student(1L, 2, 1, "李四"))); Assert.assertEquals(termIdStudentsCompareMap, termIdStudentsMap);