diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/map/MapUtil.java b/hutool-core/src/main/java/cn/hutool/v7/core/map/MapUtil.java index 6110d97de..d5bd36b02 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/map/MapUtil.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/map/MapUtil.java @@ -389,9 +389,9 @@ public class MapUtil extends MapGetUtil { final HashMap map = new HashMap<>((int) (array.length * 1.5)); for (int i = 0; i < array.length; i++) { final Object object = array[i]; - if (object instanceof Map.Entry entry) { + if (object instanceof final Map.Entry entry) { map.put(entry.getKey(), entry.getValue()); - } else if (object instanceof Object[] entry) { + } else if (object instanceof final Object[] entry) { if (entry.length > 1) { map.put(entry[0], entry[1]); } @@ -404,7 +404,7 @@ public class MapUtil extends MapGetUtil { map.put(key, value); } } - } else if (object instanceof Iterator iter) { + } else if (object instanceof final Iterator iter) { if (iter.hasNext()) { final Object key = iter.next(); if (iter.hasNext()) { @@ -838,7 +838,7 @@ public class MapUtil extends MapGetUtil { return null; } - if (map instanceof TreeMap result) { + if (map instanceof final TreeMap result) { // 已经是可排序Map,此时只有比较器一致才返回原map if (null == comparator || comparator.equals(result.comparator())) { return result; @@ -1399,4 +1399,45 @@ public class MapUtil extends MapGetUtil { index++; } } + + /** + * 将多层级Map处理为一个层级Map类型 + * + * @param map 入参Map + * @return 单层级Map返回值 + * @param 键类型 + * @param 值类型 + */ + 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); + if(null == flatMap){ + flatMap = new HashMap<>(); + } + + final Map finalFlatMap = flatMap; + map.forEach((k, v) -> { + // 避免嵌套循环 + if (v instanceof Map && v != map) { + flatten((Map) v, finalFlatMap); + } else { + finalFlatMap.put(k, v); + } + }); + + return flatMap; + } } diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/stream/EasyStream.java b/hutool-core/src/main/java/cn/hutool/v7/core/stream/EasyStream.java index 3e5c0e225..639a3495f 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/stream/EasyStream.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/stream/EasyStream.java @@ -22,6 +22,7 @@ import cn.hutool.v7.core.lang.Opt; import cn.hutool.v7.core.math.NumberUtil; import cn.hutool.v7.core.util.ObjUtil; +import java.io.Serial; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Collection; @@ -100,6 +101,7 @@ public class EasyStream extends AbstractEnhancedWrappedStream Builder builder() { return new Builder() { + @Serial private static final long serialVersionUID = 1L; private final Stream.Builder streamBuilder = Stream.builder();