From 4dcbc74cd1b33ec3d2f3210133c2103c53011ac6 Mon Sep 17 00:00:00 2001 From: Looly Date: Wed, 30 Jul 2025 19:10:12 +0800 Subject: [PATCH] =?UTF-8?q?`MapUtil`=E5=A2=9E=E5=8A=A0flatten=E6=96=B9?= =?UTF-8?q?=E6=B3=95=EF=BC=88pr#1368@Gitee=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 +- .../main/java/cn/hutool/core/map/MapUtil.java | 52 ++++++++++--------- 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a0ed27628..afbc91d7d 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,8 @@ * 【captcha】 `MathGenerator`四则运算方式支持不生成负数结果(pr#1363@Gitee) * 【core 】 增加`MapValueProvider`和`RecordConverter`并支持Record转换(issue#3985@Github) * 【core 】 `CalendarUtil`增加`isSameYear`和`calendar`方法(issue#3995@Github) -* 【core 】 `DateUtil`新增方法`yyyy-MM-dd'T'HH:mmXXX`格式支持(pr#1367@Gitee) +* 【core 】 `DateUtil`增加`yyyy-MM-dd'T'HH:mmXXX`格式支持(pr#1367@Gitee) +* 【core 】 `MapUtil`增加flatten方法(pr#1368@Gitee) ### 🐞Bug修复 * 【extra 】 `Sftp``reconnectIfTimeout`方法改为捕获所有异常(issue#3989@Github) 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 3ade23d5f..985c307f1 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 @@ -1545,27 +1545,6 @@ public class MapUtil { return list; } - /** - * 递归调用将多层级Map处理为一个层级Map类型 - * - * @param map 入参Map - * @param flatMap 单层级Map返回值 - * @param 键类型 - * @param 值类型 - */ - private static void flatten(Map map, Map flatMap) { - for (Map.Entry entry : map.entrySet()) { - K key = entry.getKey(); - V value = entry.getValue(); - if (value instanceof Map) { - flatten((Map) value, flatMap); - } else { - flatMap.put(key, value); - } - } - } - - /** * 将多层级Map处理为一个层级Map类型 * @@ -1574,10 +1553,35 @@ public class MapUtil { * @param 键类型 * @param 值类型 */ - public static Map flatten(Map map) { + public static Map flatten(final Map map) { + return flatten(map, new HashMap<>()); + } + + /** + * 递归调用将多层级Map处理为一个层级Map类型 + * + * @param map 入参Map + * @param flatMap 单层级Map返回值 + * @param 键类型 + * @param 值类型 + * @return 单层级Map返回值 + */ + @SuppressWarnings("unchecked") + public static Map flatten(final Map map, Map flatMap) { Assert.notNull(map); - Map flatMap = new HashMap<>(); - flatten(map, flatMap); + if(null == flatMap){ + flatMap = new HashMap<>(); + } + + Map finalFlatMap = flatMap; + map.forEach((k, v) -> { + if (v instanceof Map) { + flatten((Map) v, finalFlatMap); + } else { + finalFlatMap.put(k, v); + } + }); + return flatMap; } }