From cae120359118e3a9182fee9f236a29da0dd3f50c Mon Sep 17 00:00:00 2001 From: chenkai Date: Tue, 29 Jul 2025 14:31:07 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=B0=86=E5=A4=9A=E5=B1=82=E7=BA=A7Map?= =?UTF-8?q?=E5=A4=84=E7=90=86=E4=B8=BA=E4=B8=80=E4=B8=AA=E5=B1=82=E7=BA=A7?= =?UTF-8?q?Map=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/hutool/core/map/MapUtil.java | 36 +++++++++++++++++++ .../java/cn/hutool/core/map/MapUtilTest.java | 25 +++++++++++++ 2 files changed, 61 insertions(+) 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 27aaecbf5..e99787edd 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 @@ -1544,4 +1544,40 @@ 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类型 + * + * @param map 入参Map + * @return 单层级Map返回值 + * @param 键类型 + * @param 值类型 + */ + public static Map flatten(Map map) { + Assert.notNull(map); + Map flatMap = new HashMap<>(); + flatten(map, flatMap); + return flatMap; + } } 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 3082e0979..16f458576 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 @@ -862,4 +862,29 @@ public class MapUtilTest { assertEquals(0, MapUtil.get(map, "age", new TypeReference() { }, 0)); } + + @Test + public void flattenMapReturnsTest() { + Map clothes = new HashMap<>(); + clothes.put("clothesName", "ANTA"); + clothes.put("clothesPrice", "200"); + + Map person = new HashMap<>(); + person.put("personName", "XXXX"); + person.put("clothes", clothes); + + Map map = new HashMap<>(); + map.put("home", "AAA"); + map.put("person", person); + + Map flattenMap = MapUtil.flatten(map); + assertEquals("ANTA", MapUtil.get(flattenMap, "clothesName", new TypeReference() { + })); + assertEquals("200", MapUtil.get(flattenMap, "clothesPrice", new TypeReference() { + })); + assertEquals("XXXX", MapUtil.get(flattenMap, "personName", new TypeReference() { + })); + assertEquals("AAA", MapUtil.get(flattenMap, "home", new TypeReference() { + })); + } } From 0661bf27df13aeb250561ffdfc5694ae939c4cc6 Mon Sep 17 00:00:00 2001 From: chenkai Date: Tue, 29 Jul 2025 14:40:48 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=B0=86=E5=A4=9A=E5=B1=82=E7=BA=A7Map?= =?UTF-8?q?=E5=A4=84=E7=90=86=E4=B8=BA=E4=B8=80=E4=B8=AA=E5=B1=82=E7=BA=A7?= =?UTF-8?q?Map=E7=B1=BB=E5=9E=8B?= 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 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 e99787edd..3ade23d5f 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 @@ -1577,7 +1577,7 @@ public class MapUtil { public static Map flatten(Map map) { Assert.notNull(map); Map flatMap = new HashMap<>(); - flatten(map, flatMap); + flatten(map, flatMap); return flatMap; } }