Skip to content

Commit b86147c

Browse files
committed
MapUtil.map对null友好,且修复了测试用例中分组问题
1 parent 8d23f4c commit b86147c

File tree

2 files changed

+5
-3
lines changed

2 files changed

+5
-3
lines changed

hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import cn.hutool.core.lang.Filter;
77
import cn.hutool.core.lang.Pair;
88
import cn.hutool.core.lang.TypeReference;
9+
import cn.hutool.core.stream.CollectorUtil;
910
import cn.hutool.core.util.ArrayUtil;
1011
import cn.hutool.core.util.ReflectUtil;
1112
import cn.hutool.core.util.StrUtil;
@@ -708,7 +709,7 @@ public static <K, V, R> Map<K, R> map(Map<K, V> map, BiFunction<K, V, R> biFunct
708709
if (null == map || null == biFunction) {
709710
return MapUtil.newHashMap();
710711
}
711-
return map.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, m -> biFunction.apply(m.getKey(), m.getValue())));
712+
return map.entrySet().stream().collect(CollectorUtil.toMap(Map.Entry::getKey, m -> biFunction.apply(m.getKey(), m.getValue()),(l,r)->l));
712713
}
713714

714715
/**

hutool-core/src/test/java/cn/hutool/core/map/MapUtilTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public void mapTest() {
8282
// 如你所见,它是一个map,key由用户id,value由用户组成
8383
Map<Long, User> 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()));
8484
// 如你所见,它是一个map,key由分组id,value由用户ids组成,典型的多对多关系
85-
Map<Long, List<Long>> 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())));
85+
Map<Long, List<Long>> 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())));
8686

8787
// 神奇的魔法发生了, 分组id和用户ids组成的map,竟然变成了订单编号和用户实体集合组成的map
8888
Map<Long, List<User>> groupIdUserMap = MapUtil.map(groupIdUserIdsMap, (groupId, userIds) -> userIds.stream().map(idUserMap::get).collect(Collectors.toList()));
@@ -98,7 +98,8 @@ public void mapTest() {
9898
Assert.assertEquals("竹鼠发烧找华农", users.get(2).getName());
9999
Assert.assertEquals("朴实无华朱一旦", users.get(3).getName());
100100
});
101-
// 能写代码真开心
101+
// 对null友好
102+
MapUtil.map(MapUtil.of(0, 0), (k, v) -> null).forEach((k, v) -> Assert.assertNull(v));
102103
}
103104

104105
@Test

0 commit comments

Comments
 (0)