From 6a97f12eb07fdebf429ad7836947ce23dc9e8442 Mon Sep 17 00:00:00 2001 From: VampireAchao Date: Sun, 12 Nov 2023 16:33:31 +0800 Subject: [PATCH] =?UTF-8?q?[Fix]=20=E4=BF=AE=E5=A4=8D=20github=20issue=203?= =?UTF-8?q?380=20CollectorUtil.reduceListMap=E4=B8=8Ecollectors.groupby?= =?UTF-8?q?=E4=B8=80=E8=B5=B7=E4=BD=BF=E7=94=A8=E6=97=B6=E5=87=BA=E7=8E=B0?= =?UTF-8?q?=E4=B8=8E=E9=A2=84=E6=9C=9F=E4=B8=8D=E7=AC=A6=E7=9A=84=E7=BB=93?= =?UTF-8?q?=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/core/stream/CollectorUtil.java | 9 +++++++-- .../hutool/core/stream/CollectorUtilTest.java | 17 +++++++++++++++++ 2 files changed, 24 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 f474c53ea..a1bf57f09 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 @@ -243,8 +243,13 @@ public class CollectorUtil { value.forEach((k, v) -> result.computeIfAbsent(k, i -> new ArrayList<>()).add(v)); return result; }, (l, r) -> { - r.forEach((k, v) -> l.computeIfAbsent(k, i -> new ArrayList<>()).addAll(v)); - return l; + R resultMap = mapSupplier.get(); + resultMap.putAll(l); + r.forEach((k, v) -> { + List list = resultMap.computeIfAbsent(k, i -> new ArrayList<>()); + list.addAll(v); + }); + return resultMap; } ); } diff --git a/hutool-core/src/test/java/cn/hutool/core/stream/CollectorUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/stream/CollectorUtilTest.java index bd8a415ba..c79d7f494 100644 --- a/hutool-core/src/test/java/cn/hutool/core/stream/CollectorUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/stream/CollectorUtilTest.java @@ -1,5 +1,6 @@ package cn.hutool.core.stream; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.map.MapUtil; import org.junit.Assert; import org.junit.Test; @@ -29,6 +30,22 @@ public class CollectorUtilTest { Assert.assertEquals(MapUtil.builder("苏格拉底", Arrays.asList(1, 2)) .put("特拉叙马霍斯", Arrays.asList(3, 1, 2)).build(), nameScoresMap); + + List> data = ListUtil.toList( + MapUtil.builder("name", "sam").put("count", "80").map(), + MapUtil.builder("name", "sam").put("count", "81").map(), + MapUtil.builder("name", "sam").put("count", "82").map(), + MapUtil.builder("name", "jack").put("count", "80").map(), + MapUtil.builder("name", "jack").put("count", "90").map() + ); + + Map>> nameMap = data.stream() + .collect(Collectors.groupingBy(e -> e.get("name"), CollectorUtil.reduceListMap())); + Assert.assertEquals(MapUtil.builder("jack", MapUtil.builder("name", Arrays.asList("jack", "jack")) + .put("count", Arrays.asList("80", "90")).build()) + .put("sam", MapUtil.builder("name", Arrays.asList("sam", "sam", "sam")) + .put("count", Arrays.asList("80", "81", "82")).build()) + .build(), nameMap); } @Test