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() { + })); + } }