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 18e643b76..240cfd09e 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 @@ -1258,13 +1258,7 @@ public class MapUtil extends MapGetUtil { final Map> map = new HashMap<>(); for (final Map.Entry pair : entries) { - final List values; - if (map.containsKey(pair.getKey())) { - values = map.get(pair.getKey()); - } else { - values = ListUtil.of(); - map.put(pair.getKey(), values); - } + final List values = map.computeIfAbsent(pair.getKey(), k -> new ArrayList<>()); values.add(pair.getValue()); } return map; 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 0899a63e6..94a55651f 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 @@ -150,6 +150,34 @@ public class CollectorUtil { return groupingBy(classifier, Collectors.toList()); } + + /** + * 对null友好的 toMap 操作的 {@link Collector}实现,默认使用HashMap + * + * @param keyMapper 指定map中的key + * @param valueMapper 指定map中的value + * @param 实体类型 + * @param map中key的类型 + * @param map中value的类型 + * @return 对null友好的 toMap 操作的 {@link Collector}实现 + */ + public static Collector> toMap(final Function keyMapper, + final Function valueMapper) { + return toMap(keyMapper, valueMapper, (l, r) -> r); + } + + /** + * 对null友好的 toMap 操作的 {@link Collector}实现,默认使用HashMap + * + * @param keyMapper 指定map中的key + * @param 实体类型 + * @param map中key的类型 + * @return 对null友好的 toMap 操作的 {@link Collector}实现 + */ + public static Collector> toMap(final Function keyMapper) { + return toMap(keyMapper, Function.identity()); + } + /** * 对null友好的 toMap 操作的 {@link Collector}实现,默认使用HashMap * @@ -162,8 +190,8 @@ public class CollectorUtil { * @return 对null友好的 toMap 操作的 {@link Collector}实现 */ public static Collector> toMap(final Function keyMapper, - final Function valueMapper, - final BinaryOperator mergeFunction) { + final Function valueMapper, + final BinaryOperator mergeFunction) { return toMap(keyMapper, valueMapper, mergeFunction, HashMap::new); }