From b86147c4ae1c66824225889181339b8881b2dec7 Mon Sep 17 00:00:00 2001 From: VampireAchao Date: Sat, 7 May 2022 13:01:30 +0800 Subject: [PATCH] =?UTF-8?q?MapUtil.map=E5=AF=B9null=E5=8F=8B=E5=A5=BD?= =?UTF-8?q?=EF=BC=8C=E4=B8=94=E4=BF=AE=E5=A4=8D=E4=BA=86=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=94=A8=E4=BE=8B=E4=B8=AD=E5=88=86=E7=BB=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java | 3 ++- .../src/test/java/cn/hutool/core/map/MapUtilTest.java | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java b/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java index 23fb8e604..6dff51f57 100755 --- a/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java @@ -6,6 +6,7 @@ import cn.hutool.core.lang.Editor; import cn.hutool.core.lang.Filter; import cn.hutool.core.lang.Pair; import cn.hutool.core.lang.TypeReference; +import cn.hutool.core.stream.CollectorUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.StrUtil; @@ -708,7 +709,7 @@ public class MapUtil { if (null == map || null == biFunction) { return MapUtil.newHashMap(); } - return map.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, m -> biFunction.apply(m.getKey(), m.getValue()))); + return map.entrySet().stream().collect(CollectorUtil.toMap(Map.Entry::getKey, m -> biFunction.apply(m.getKey(), m.getValue()),(l,r)->l)); } /** diff --git a/hutool-core/src/test/java/cn/hutool/core/map/MapUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/map/MapUtilTest.java index 876e31446..ef7540d0e 100644 --- a/hutool-core/src/test/java/cn/hutool/core/map/MapUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/map/MapUtilTest.java @@ -82,7 +82,7 @@ public class MapUtilTest { // 如你所见,它是一个map,key由用户id,value由用户组成 Map idUserMap = Stream.iterate(0L, i -> ++i).limit(4).map(i -> User.builder().id(i).name(customers.poll()).build()).collect(Collectors.toMap(User::getId, Function.identity())); // 如你所见,它是一个map,key由分组id,value由用户ids组成,典型的多对多关系 - Map> groupIdUserIdsMap = groups.stream().flatMap(group -> idUserMap.keySet().stream().map(userId -> UserGroup.builder().groupId(group.getId()).userId(userId).build())).collect(Collectors.groupingBy(UserGroup::getUserId, Collectors.mapping(UserGroup::getGroupId, Collectors.toList()))); + Map> groupIdUserIdsMap = groups.stream().flatMap(group -> idUserMap.keySet().stream().map(userId -> UserGroup.builder().groupId(group.getId()).userId(userId).build())).collect(Collectors.groupingBy(UserGroup::getGroupId, Collectors.mapping(UserGroup::getUserId, Collectors.toList()))); // 神奇的魔法发生了, 分组id和用户ids组成的map,竟然变成了订单编号和用户实体集合组成的map Map> groupIdUserMap = MapUtil.map(groupIdUserIdsMap, (groupId, userIds) -> userIds.stream().map(idUserMap::get).collect(Collectors.toList())); @@ -98,7 +98,8 @@ public class MapUtilTest { Assert.assertEquals("竹鼠发烧找华农", users.get(2).getName()); Assert.assertEquals("朴实无华朱一旦", users.get(3).getName()); }); - // 能写代码真开心 + // 对null友好 + MapUtil.map(MapUtil.of(0, 0), (k, v) -> null).forEach((k, v) -> Assert.assertNull(v)); } @Test