[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-shenrulijiemaputilsjava-mapcaozuoliqizhinan":3},{"id":4,"title":5,"slug":6,"summary":7,"content":8,"contentHtml":9,"wordCount":10,"readingTime":11,"categoryId":12,"tags":13,"coverImage":13,"thumbnail":13,"status":14,"isTop":15,"isRecommended":15,"allowComments":15,"password":13,"viewCount":16,"likeCount":15,"commentCount":15,"seoTitle":5,"seoKeywords":17,"seoDescription":18,"source":13,"sourceUrl":13,"publishTime":19},"2002404172320796674","深入理解MapUtils：Java Map操作利器指南","shenrulijiemaputilsjava-mapcaozuoliqizhinan","## 引言 在Java开发中，Map（映射）是一种极为常用的数据结构，用于存储键值对。虽然Java标准库提供了丰富的Map操作方法，但在实际开发中，我们经常需要更复杂、更便捷的操作。这正是Apache Commons Collections库中`MapUtils`发挥作用的地方。本文将深入探讨`MapUtils`的使用，展示它如何简化Map操作，提高代码的可读性和效率。 ## 一、环境配置与依赖 在开始之前，需要将Apache Commons Collections4添加到项目中： **Maven依赖：** ```xml org.apache.commons commons-collections4 4.4 ``` **Gradle依赖：** ```groovy implementation 'org.apache.commons:commons-collections4:4.4' ```...","## 引言\n\n在Java开发中，Map（映射）是一种极为常用的数据结构，用于存储键值对。虽然Java标准库提供了丰富的Map操作方法，但在实际开发中，我们经常需要更复杂、更便捷的操作。这正是Apache Commons Collections库中`MapUtils`发挥作用的地方。本文将深入探讨`MapUtils`的使用，展示它如何简化Map操作，提高代码的可读性和效率。\n\n## 一、环境配置与依赖\n\n在开始之前，需要将Apache Commons Collections4添加到项目中：\n\n**Maven依赖：**\n```xml\n\u003Cdependency>\n    \u003CgroupId>org.apache.commons\u003C\u002FgroupId>\n    \u003CartifactId>commons-collections4\u003C\u002FartifactId>\n    \u003Cversion>4.4\u003C\u002Fversion>\n\u003C\u002Fdependency>\n```\n\n**Gradle依赖：**\n```groovy\nimplementation 'org.apache.commons:commons-collections4:4.4'\n```\n\n## 二、MapUtils核心功能详解\n\n### 2.1 创建和初始化Map\n\n```java\nimport org.apache.commons.collections4.MapUtils;\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.SortedMap;\nimport java.util.TreeMap;\n\npublic class MapUtilsDemo {\n    public static void main(String[] args) {\n        \u002F\u002F 1. 创建空Map\n        Map\u003CString, String> emptyMap = MapUtils.EMPTY_SORTED_MAP;\n        \n        \u002F\u002F 2. 创建不可变Map\n        Map\u003CString, Integer> immutableMap = MapUtils.unmodifiableMap(new HashMap\u003C>());\n        \n        \u002F\u002F 3. 快速构建Map\n        Map\u003CString, Object> quickMap = MapUtils.putAll(new HashMap\u003C>(),\n            new String[][] {\n                {\"name\", \"张三\"},\n                {\"age\", \"25\"},\n                {\"city\", \"北京\"}\n            }\n        );\n        \n        \u002F\u002F 4. 通过键值对数组创建\n        Map\u003CString, String> arrayMap = MapUtils.putAll(new HashMap\u003C>(),\n            new String[] {\"key1\", \"value1\", \"key2\", \"value2\"}\n        );\n    }\n}\n```\n\n### 2.2 安全获取值\n\n这是`MapUtils`最常用的功能之一，可以避免`NullPointerException`：\n\n```java\nimport org.apache.commons.collections4.MapUtils;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class SafeAccessDemo {\n    public static void main(String[] args) {\n        Map\u003CString, Object> userData = new HashMap\u003C>();\n        userData.put(\"name\", \"李四\");\n        userData.put(\"age\", 30);\n        \u002F\u002F 注意：没有\"city\"键\n        \n        \u002F\u002F 传统方式 - 容易产生NullPointerException\n        String cityTraditional = (String) userData.get(\"city\"); \u002F\u002F 可能为null\n        \n        \u002F\u002F 使用MapUtils - 安全的方式\n        String city = MapUtils.getString(userData, \"city\"); \u002F\u002F 返回null\n        String cityWithDefault = MapUtils.getString(userData, \"city\", \"未知\"); \u002F\u002F 返回\"未知\"\n        \n        \u002F\u002F 获取不同类型的数据\n        String name = MapUtils.getString(userData, \"name\", \"\"); \u002F\u002F 返回\"李四\"\n        Integer age = MapUtils.getInteger(userData, \"age\", 0); \u002F\u002F 返回30\n        Boolean isAdmin = MapUtils.getBoolean(userData, \"isAdmin\", false); \u002F\u002F 返回false\n        \n        System.out.println(\"城市：\" + cityWithDefault); \u002F\u002F 输出：城市：未知\n        System.out.println(\"姓名：\" + name);           \u002F\u002F 输出：姓名：李四\n    }\n}\n```\n\n### 2.3 Map判空与验证\n\n```java\nimport org.apache.commons.collections4.MapUtils;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class MapValidationDemo {\n    public static void main(String[] args) {\n        Map\u003CString, String> emptyMap = new HashMap\u003C>();\n        Map\u003CString, String> nullMap = null;\n        Map\u003CString, String> populatedMap = new HashMap\u003C>();\n        populatedMap.put(\"key\", \"value\");\n        \n        \u002F\u002F 判断Map是否为空（包含null检查）\n        System.out.println(MapUtils.isEmpty(emptyMap));   \u002F\u002F true\n        System.out.println(MapUtils.isEmpty(nullMap));    \u002F\u002F true\n        System.out.println(MapUtils.isEmpty(populatedMap)); \u002F\u002F false\n        \n        \u002F\u002F 判断Map是否非空\n        System.out.println(MapUtils.isNotEmpty(emptyMap));   \u002F\u002F false\n        System.out.println(MapUtils.isNotEmpty(populatedMap)); \u002F\u002F true\n        \n        \u002F\u002F 安全获取大小（避免NPE）\n        System.out.println(MapUtils.size(nullMap));    \u002F\u002F 0\n        System.out.println(MapUtils.size(populatedMap)); \u002F\u002F 1\n        \n        \u002F\u002F 验证Map中是否存在指定的键\n        System.out.println(MapUtils.isNotEmpty(populatedMap)); \u002F\u002F true\n    }\n}\n```\n\n### 2.4 Map转换与反转\n\n```java\nimport org.apache.commons.collections4.MapUtils;\nimport org.apache.commons.collections4.Transformer;\nimport org.apache.commons.collections4.TransformerUtils;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class MapTransformationDemo {\n    public static void main(String[] args) {\n        Map\u003CString, Integer> originalMap = new HashMap\u003C>();\n        originalMap.put(\"apple\", 5);\n        originalMap.put(\"banana\", 3);\n        originalMap.put(\"orange\", 8);\n        \n        \u002F\u002F 1. 反转Map（键值互换）\n        Map\u003CInteger, String> invertedMap = MapUtils.invertMap(originalMap);\n        System.out.println(\"反转后的Map: \" + invertedMap);\n        \u002F\u002F 输出：{5=apple, 3=banana, 8=orange}\n        \n        \u002F\u002F 2. 转换值\n        Transformer\u003CInteger, String> transformer = new Transformer\u003CInteger, String>() {\n            @Override\n            public String transform(Integer input) {\n                return \"数量: \" + input;\n            }\n        };\n        \n        Map\u003CString, String> transformedMap = new HashMap\u003C>();\n        MapUtils.transformValues(originalMap, transformer, transformedMap);\n        System.out.println(\"转换后的Map: \" + transformedMap);\n        \u002F\u002F 输出：{apple=数量: 5, banana=数量: 3, orange=数量: 8}\n        \n        \u002F\u002F 3. 使用lambda表达式（Java 8+）\n        MapUtils.transformValues(originalMap, value -> \"共\" + value + \"个\", transformedMap);\n    }\n}\n```\n\n### 2.5 Map合并与比较\n\n```java\nimport org.apache.commons.collections4.MapUtils;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class MapMergeDemo {\n    public static void main(String[] args) {\n        Map\u003CString, Integer> map1 = new HashMap\u003C>();\n        map1.put(\"A\", 1);\n        map1.put(\"B\", 2);\n        \n        Map\u003CString, Integer> map2 = new HashMap\u003C>();\n        map2.put(\"B\", 20);\n        map2.put(\"C\", 3);\n        \n        \u002F\u002F 1. 合并Map（相同键时，值相加）\n        Map\u003CString, Integer> mergedMap = MapUtils.merge(map1, map2, Integer::sum);\n        System.out.println(\"合并后的Map: \" + mergedMap);\n        \u002F\u002F 输出：{A=1, B=22, C=3}\n        \n        \u002F\u002F 2. 检查Map是否相等（忽略顺序）\n        Map\u003CString, String> mapA = new HashMap\u003C>();\n        mapA.put(\"1\", \"一\");\n        mapA.put(\"2\", \"二\");\n        \n        Map\u003CString, String> mapB = new HashMap\u003C>();\n        mapB.put(\"2\", \"二\");\n        mapB.put(\"1\", \"一\");\n        \n        boolean isEqual = MapUtils.isEqualMap(mapA, mapB);\n        System.out.println(\"Map是否相等: \" + isEqual); \u002F\u002F 输出：true\n    }\n}\n```\n\n### 2.6 多层嵌套Map操作\n\n```java\nimport org.apache.commons.collections4.MapUtils;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class NestedMapDemo {\n    public static void main(String[] args) {\n        \u002F\u002F 创建嵌套Map结构\n        Map\u003CString, Object> company = new HashMap\u003C>();\n        Map\u003CString, Object> department = new HashMap\u003C>();\n        Map\u003CString, Object> employee = new HashMap\u003C>();\n        \n        employee.put(\"name\", \"王五\");\n        employee.put(\"age\", 28);\n        employee.put(\"position\", \"工程师\");\n        \n        department.put(\"development\", employee);\n        company.put(\"IT\", department);\n        \n        \u002F\u002F 安全获取嵌套值\n        String employeeName = MapUtils.getString(company, \"IT\u002Fdevelopment\u002Fname\", \"未知\");\n        Integer employeeAge = MapUtils.getInteger(company, \"IT\u002Fdevelopment\u002Fage\", 0);\n        \n        System.out.println(\"员工姓名: \" + employeeName); \u002F\u002F 输出：员工姓名: 王五\n        System.out.println(\"员工年龄: \" + employeeAge); \u002F\u002F 输出：员工年龄: 28\n        \n        \u002F\u002F 设置嵌套值\n        MapUtils.setProperty(company, \"IT\u002Fdevelopment\u002Fsalary\", 15000.0);\n        Double salary = MapUtils.getDouble(company, \"IT\u002Fdevelopment\u002Fsalary\", 0.0);\n        System.out.println(\"员工薪资: \" + salary); \u002F\u002F 输出：员工薪资: 15000.0\n    }\n}\n```\n\n### 2.7 迭代与过滤\n\n```java\nimport org.apache.commons.collections4.MapUtils;\nimport org.apache.commons.collections4.Predicate;\nimport org.apache.commons.collections4.Transformer;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class MapIterationDemo {\n    public static void main(String[] args) {\n        Map\u003CString, Integer> scores = new HashMap\u003C>();\n        scores.put(\"张三\", 85);\n        scores.put(\"李四\", 92);\n        scores.put(\"王五\", 78);\n        scores.put(\"赵六\", 95);\n        scores.put(\"钱七\", 60);\n        \n        \u002F\u002F 1. 过滤符合条件的条目\n        Predicate\u003CInteger> highScorePredicate = new Predicate\u003CInteger>() {\n            @Override\n            public boolean evaluate(Integer score) {\n                return score >= 90;\n            }\n        };\n        \n        Map\u003CString, Integer> highScores = MapUtils.filterValues(scores, highScorePredicate);\n        System.out.println(\"高分学生: \" + highScores);\n        \u002F\u002F 输出：高分学生: {李四=92, 赵六=95}\n        \n        \u002F\u002F 2. 使用lambda表达式（Java 8+）\n        Map\u003CString, Integer> passedScores = MapUtils.filterValues(scores, score -> score >= 60);\n        System.out.println(\"及格学生: \" + passedScores);\n        \n        \u002F\u002F 3. 转换键\n        Transformer\u003CString, String> keyTransformer = new Transformer\u003CString, String>() {\n            @Override\n            public String transform(String name) {\n                return \"学生-\" + name;\n            }\n        };\n        \n        Map\u003CString, Integer> transformedKeys = new HashMap\u003C>();\n        MapUtils.transformKeys(scores, keyTransformer, transformedKeys);\n        System.out.println(\"转换键后的Map: \" + transformedKeys);\n    }\n}\n```\n\n## 三、实际应用案例\n\n### 3.1 配置管理系统\n\n```java\nimport org.apache.commons.collections4.MapUtils;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class ConfigurationManager {\n    private Map\u003CString, Object> config = new HashMap\u003C>();\n    \n    public ConfigurationManager() {\n        \u002F\u002F 初始化默认配置\n        config.put(\"app.name\", \"MyApplication\");\n        config.put(\"app.version\", \"1.0.0\");\n        config.put(\"database.host\", \"localhost\");\n        config.put(\"database.port\", 3306);\n        config.put(\"server.timeout\", 30000);\n    }\n    \n    public String getString(String key) {\n        return MapUtils.getString(config, key, \"\");\n    }\n    \n    public int getInt(String key) {\n        return MapUtils.getInteger(config, key, 0);\n    }\n    \n    public boolean getBoolean(String key) {\n        return MapUtils.getBoolean(config, key, false);\n    }\n    \n    public void updateConfig(Map\u003CString, Object> newConfig) {\n        \u002F\u002F 安全合并配置\n        MapUtils.merge(config, newConfig, (oldVal, newVal) -> newVal);\n    }\n    \n    public void printConfig() {\n        System.out.println(\"当前配置:\");\n        config.forEach((key, value) -> \n            System.out.println(key + \" = \" + value));\n    }\n}\n```\n\n### 3.2 数据转换工具\n\n```java\nimport org.apache.commons.collections4.MapUtils;\nimport org.apache.commons.collections4.Transformer;\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.List;\nimport java.util.Arrays;\n\npublic class DataTransformer {\n    \n    \u002F**\n     * 将对象转换为Map\n     *\u002F\n    public static Map\u003CString, Object> objectToMap(Object obj) {\n        \u002F\u002F 实际应用中，这里可以使用反射获取对象属性\n        \u002F\u002F 这里简化示例\n        Map\u003CString, Object> map = new HashMap\u003C>();\n        if (obj instanceof User) {\n            User user = (User) obj;\n            map.put(\"id\", user.getId());\n            map.put(\"name\", user.getName());\n            map.put(\"email\", user.getEmail());\n        }\n        return map;\n    }\n    \n    \u002F**\n     * 从Map中安全提取数据创建对象\n     *\u002F\n    public static User mapToUser(Map\u003CString, Object> map) {\n        if (MapUtils.isEmpty(map)) {\n            return null;\n        }\n        \n        User user = new User();\n        user.setId(MapUtils.getLong(map, \"id\", 0L));\n        user.setName(MapUtils.getString(map, \"name\", \"\"));\n        user.setEmail(MapUtils.getString(map, \"email\", \"\"));\n        \n        return user;\n    }\n    \n    \u002F**\n     * 过滤敏感信息\n     *\u002F\n    public static Map\u003CString, Object> filterSensitiveData(Map\u003CString, Object> data) {\n        List\u003CString> sensitiveKeys = Arrays.asList(\"password\", \"token\", \"creditCard\");\n        \n        return MapUtils.filterKeys(data, key -> \n            !sensitiveKeys.contains(key) && !key.contains(\"secret\"));\n    }\n    \n    static class User {\n        private Long id;\n        private String name;\n        private String email;\n        \n        \u002F\u002F 省略getter\u002Fsetter\n    }\n}\n```\n\n## 四、性能考虑与最佳实践\n\n### 4.1 性能建议\n\n1. **缓存MapUtils的结果**：如果频繁使用相同的转换操作，考虑缓存结果\n2. **避免过度包装**：简单的操作直接使用标准Map方法\n3. **注意类型安全**：使用泛型确保类型安全\n\n### 4.2 最佳实践\n\n```java\nimport org.apache.commons.collections4.MapUtils;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class BestPractices {\n    \n    \u002F\u002F 1. 使用不可变Map保护数据\n    public Map\u003CString, Object> getImmutableConfig() {\n        Map\u003CString, Object> config = new HashMap\u003C>();\n        config.put(\"timeout\", 5000);\n        config.put(\"retries\", 3);\n        return Collections.unmodifiableMap(config);\n    }\n    \n    \u002F\u002F 2. 链式操作\n    public void processUserData(Map\u003CString, Object> userData) {\n        \u002F\u002F 先过滤，再转换\n        Map\u003CString, Object> filtered = MapUtils.filterKeys(userData, \n            key -> !key.startsWith(\"_\"));\n        \n        Map\u003CString, String> transformed = new HashMap\u003C>();\n        MapUtils.transformValues(filtered, \n            value -> value == null ? \"\" : value.toString(), \n            transformed);\n    }\n    \n    \u002F\u002F 3. 防御性编程\n    public String safeGetValue(Map\u003CString, Object> map, String key) {\n        \u002F\u002F 总是提供默认值\n        return MapUtils.getString(map, key, \"DEFAULT_VALUE\");\n    }\n    \n    \u002F\u002F 4. 使用Java 8+的增强功能\n    public void modernJavaFeatures() {\n        Map\u003CString, Integer> scores = new HashMap\u003C>();\n        \n        \u002F\u002F 使用Lambda表达式\n        MapUtils.filterValues(scores, score -> score > 80);\n        \n        \u002F\u002F 使用方法引用\n        MapUtils.transformValues(scores, String::valueOf);\n    }\n}\n```\n\n## 五、总结\n\n`MapUtils`是Apache Commons Collections库中一个强大而实用的工具类，它为Java Map操作提供了：\n\n1. **安全性**：避免NullPointerException\n2. **便捷性**：简化常见操作\n3. **功能性**：提供标准库没有的高级功能\n4. **可读性**：使代码更清晰易懂\n\n尽管现代Java版本（特别是Java 8+）引入了Stream API等新特性，`MapUtils`在某些场景下仍然有其独特价值，特别是在处理多层嵌套结构、需要向后兼容或团队已经依赖Commons库的项目中。\n\n选择使用`MapUtils`还是Java标准库的新特性，应根据具体项目需求、团队熟悉度和性能要求来决定。在大多数情况下，两者可以结合使用，发挥各自优势。\n\n## 六、扩展学习\n\n1. **官方文档**：查阅https:\u002F\u002Fcommons.apache.org\u002Fproper\u002Fcommons-collections\u002F\n2. **源码学习**：研究`MapUtils`源码理解实现原理\n3. **相关工具**：了解`CollectionUtils`、`ListUtils`等相关工具类\n4. **替代方案**：探索Google Guava库的类似功能\n\n通过掌握`MapUtils`，你将能够更高效、更安全地处理Java中的Map数据结构，提升代码质量和开发效率。","\u003Ch2 data-line=\"0\" id=\"引言\">引言\u003C\u002Fh2>\n\u003Cp data-line=\"2\">在Java开发中，Map（映射）是一种极为常用的数据结构，用于存储键值对。虽然Java标准库提供了丰富的Map操作方法，但在实际开发中，我们经常需要更复杂、更便捷的操作。这正是Apache Commons Collections库中\u003Ccode>MapUtils\u003C\u002Fcode>发挥作用的地方。本文将深入探讨\u003Ccode>MapUtils\u003C\u002Fcode>的使用，展示它如何简化Map操作，提高代码的可读性和效率。\u003C\u002Fp>\n\u003Ch2 data-line=\"4\" id=\"一、环境配置与依赖\">一、环境配置与依赖\u003C\u002Fh2>\n\u003Cp data-line=\"6\">在开始之前，需要将Apache Commons Collections4添加到项目中：\u003C\u002Fp>\n\u003Cp data-line=\"8\">\u003Cstrong>Maven依赖：\u003C\u002Fstrong>\u003C\u002Fp>\n\n        \u003Cdetails  data-line=\"9\" class=\"md-editor-code\" open=\"\">\n          \u003Csummary class=\"md-editor-code-head\">\n            \u003Cdiv class=\"md-editor-code-flag\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fdiv>\n            \u003Cdiv class=\"md-editor-code-action\">\n              \u003Cspan class=\"md-editor-code-lang\">xml\u003C\u002Fspan>\n              \u003Cspan class=\"md-editor-copy-button\" data-tips=\"复制代码\">复制代码\u003C\u002Fspan>\n              \n              \u003Cspan class=\"md-editor-collapse-tips\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-circle-chevron-left md-editor-icon\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"m14 16-4-4 4-4\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\n            \u003C\u002Fdiv>\n          \u003C\u002Fsummary>\n          \u003Cpre>\u003Ccode class=\"language-xml\" language=xml>\u003Cspan class=\"md-editor-code-block\">\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">dependency\u003C\u002Fspan>&gt;\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">groupId\u003C\u002Fspan>&gt;\u003C\u002Fspan>org.apache.commons\u003Cspan class=\"hljs-tag\">&lt;\u002F\u003Cspan class=\"hljs-name\">groupId\u003C\u002Fspan>&gt;\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">artifactId\u003C\u002Fspan>&gt;\u003C\u002Fspan>commons-collections4\u003Cspan class=\"hljs-tag\">&lt;\u002F\u003Cspan class=\"hljs-name\">artifactId\u003C\u002Fspan>&gt;\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">version\u003C\u002Fspan>&gt;\u003C\u002Fspan>4.4\u003Cspan class=\"hljs-tag\">&lt;\u002F\u003Cspan class=\"hljs-name\">version\u003C\u002Fspan>&gt;\u003C\u002Fspan>\n\u003Cspan class=\"hljs-tag\">&lt;\u002F\u003Cspan class=\"hljs-name\">dependency\u003C\u002Fspan>&gt;\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan rn-wrapper aria-hidden=\"true\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\n        \u003C\u002Fdetails>\n      \u003Cp data-line=\"17\">\u003Cstrong>Gradle依赖：\u003C\u002Fstrong>\u003C\u002Fp>\n\n        \u003Cdetails  data-line=\"18\" class=\"md-editor-code\" open=\"\">\n          \u003Csummary class=\"md-editor-code-head\">\n            \u003Cdiv class=\"md-editor-code-flag\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fdiv>\n            \u003Cdiv class=\"md-editor-code-action\">\n              \u003Cspan class=\"md-editor-code-lang\">groovy\u003C\u002Fspan>\n              \u003Cspan class=\"md-editor-copy-button\" data-tips=\"复制代码\">复制代码\u003C\u002Fspan>\n              \n              \u003Cspan class=\"md-editor-collapse-tips\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-circle-chevron-left md-editor-icon\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"m14 16-4-4 4-4\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\n            \u003C\u002Fdiv>\n          \u003C\u002Fsummary>\n          \u003Cpre>\u003Ccode class=\"language-groovy\" language=groovy>\u003Cspan class=\"md-editor-code-block\">implementation \u003Cspan class=\"hljs-string\">&#x27;org.apache.commons:commons-collections4:4.4&#x27;\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan rn-wrapper aria-hidden=\"true\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\n        \u003C\u002Fdetails>\n      \u003Ch2 data-line=\"22\" id=\"二、MapUtils核心功能详解\">二、MapUtils核心功能详解\u003C\u002Fh2>\n\u003Ch3 data-line=\"24\" id=\"2.1 创建和初始化Map\">2.1 创建和初始化Map\u003C\u002Fh3>\n\n        \u003Cdetails  data-line=\"26\" class=\"md-editor-code\" open=\"\">\n          \u003Csummary class=\"md-editor-code-head\">\n            \u003Cdiv class=\"md-editor-code-flag\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fdiv>\n            \u003Cdiv class=\"md-editor-code-action\">\n              \u003Cspan class=\"md-editor-code-lang\">java\u003C\u002Fspan>\n              \u003Cspan class=\"md-editor-copy-button\" data-tips=\"复制代码\">复制代码\u003C\u002Fspan>\n              \n              \u003Cspan class=\"md-editor-collapse-tips\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-circle-chevron-left md-editor-icon\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"m14 16-4-4 4-4\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\n            \u003C\u002Fdiv>\n          \u003C\u002Fsummary>\n          \u003Cpre>\u003Ccode class=\"language-java\" language=java>\u003Cspan class=\"md-editor-code-block\">\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> org.apache.commons.collections4.MapUtils;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.HashMap;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.Map;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.SortedMap;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.TreeMap;\n\n\u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">class\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">MapUtilsDemo\u003C\u002Fspan> {\n    \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">static\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">void\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">main\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">(String[] args)\u003C\u002Fspan> {\n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 1. 创建空Map\u003C\u002Fspan>\n        Map&lt;String, String&gt; emptyMap = MapUtils.EMPTY_SORTED_MAP;\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 2. 创建不可变Map\u003C\u002Fspan>\n        Map&lt;String, Integer&gt; immutableMap = MapUtils.unmodifiableMap(\u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;());\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 3. 快速构建Map\u003C\u002Fspan>\n        Map&lt;String, Object&gt; quickMap = MapUtils.putAll(\u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;(),\n            \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">String\u003C\u002Fspan>[][] {\n                {\u003Cspan class=\"hljs-string\">&quot;name&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;张三&quot;\u003C\u002Fspan>},\n                {\u003Cspan class=\"hljs-string\">&quot;age&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;25&quot;\u003C\u002Fspan>},\n                {\u003Cspan class=\"hljs-string\">&quot;city&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;北京&quot;\u003C\u002Fspan>}\n            }\n        );\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 4. 通过键值对数组创建\u003C\u002Fspan>\n        Map&lt;String, String&gt; arrayMap = MapUtils.putAll(\u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;(),\n            \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">String\u003C\u002Fspan>[] {\u003Cspan class=\"hljs-string\">&quot;key1&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;value1&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;key2&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;value2&quot;\u003C\u002Fspan>}\n        );\n    }\n}\u003C\u002Fspan>\u003Cspan rn-wrapper aria-hidden=\"true\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\n        \u003C\u002Fdetails>\n      \u003Ch3 data-line=\"58\" id=\"2.2 安全获取值\">2.2 安全获取值\u003C\u002Fh3>\n\u003Cp data-line=\"60\">这是\u003Ccode>MapUtils\u003C\u002Fcode>最常用的功能之一，可以避免\u003Ccode>NullPointerException\u003C\u002Fcode>：\u003C\u002Fp>\n\n        \u003Cdetails  data-line=\"62\" class=\"md-editor-code\" open=\"\">\n          \u003Csummary class=\"md-editor-code-head\">\n            \u003Cdiv class=\"md-editor-code-flag\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fdiv>\n            \u003Cdiv class=\"md-editor-code-action\">\n              \u003Cspan class=\"md-editor-code-lang\">java\u003C\u002Fspan>\n              \u003Cspan class=\"md-editor-copy-button\" data-tips=\"复制代码\">复制代码\u003C\u002Fspan>\n              \n              \u003Cspan class=\"md-editor-collapse-tips\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-circle-chevron-left md-editor-icon\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"m14 16-4-4 4-4\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\n            \u003C\u002Fdiv>\n          \u003C\u002Fsummary>\n          \u003Cpre>\u003Ccode class=\"language-java\" language=java>\u003Cspan class=\"md-editor-code-block\">\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> org.apache.commons.collections4.MapUtils;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.HashMap;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.Map;\n\n\u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">class\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">SafeAccessDemo\u003C\u002Fspan> {\n    \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">static\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">void\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">main\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">(String[] args)\u003C\u002Fspan> {\n        Map&lt;String, Object&gt; userData = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;();\n        userData.put(\u003Cspan class=\"hljs-string\">&quot;name&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;李四&quot;\u003C\u002Fspan>);\n        userData.put(\u003Cspan class=\"hljs-string\">&quot;age&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">30\u003C\u002Fspan>);\n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 注意：没有&quot;city&quot;键\u003C\u002Fspan>\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 传统方式 - 容易产生NullPointerException\u003C\u002Fspan>\n        \u003Cspan class=\"hljs-type\">String\u003C\u002Fspan> \u003Cspan class=\"hljs-variable\">cityTraditional\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">=\u003C\u002Fspan> (String) userData.get(\u003Cspan class=\"hljs-string\">&quot;city&quot;\u003C\u002Fspan>); \u003Cspan class=\"hljs-comment\">\u002F\u002F 可能为null\u003C\u002Fspan>\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 使用MapUtils - 安全的方式\u003C\u002Fspan>\n        \u003Cspan class=\"hljs-type\">String\u003C\u002Fspan> \u003Cspan class=\"hljs-variable\">city\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">=\u003C\u002Fspan> MapUtils.getString(userData, \u003Cspan class=\"hljs-string\">&quot;city&quot;\u003C\u002Fspan>); \u003Cspan class=\"hljs-comment\">\u002F\u002F 返回null\u003C\u002Fspan>\n        \u003Cspan class=\"hljs-type\">String\u003C\u002Fspan> \u003Cspan class=\"hljs-variable\">cityWithDefault\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">=\u003C\u002Fspan> MapUtils.getString(userData, \u003Cspan class=\"hljs-string\">&quot;city&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;未知&quot;\u003C\u002Fspan>); \u003Cspan class=\"hljs-comment\">\u002F\u002F 返回&quot;未知&quot;\u003C\u002Fspan>\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 获取不同类型的数据\u003C\u002Fspan>\n        \u003Cspan class=\"hljs-type\">String\u003C\u002Fspan> \u003Cspan class=\"hljs-variable\">name\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">=\u003C\u002Fspan> MapUtils.getString(userData, \u003Cspan class=\"hljs-string\">&quot;name&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;&quot;\u003C\u002Fspan>); \u003Cspan class=\"hljs-comment\">\u002F\u002F 返回&quot;李四&quot;\u003C\u002Fspan>\n        \u003Cspan class=\"hljs-type\">Integer\u003C\u002Fspan> \u003Cspan class=\"hljs-variable\">age\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">=\u003C\u002Fspan> MapUtils.getInteger(userData, \u003Cspan class=\"hljs-string\">&quot;age&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>); \u003Cspan class=\"hljs-comment\">\u002F\u002F 返回30\u003C\u002Fspan>\n        \u003Cspan class=\"hljs-type\">Boolean\u003C\u002Fspan> \u003Cspan class=\"hljs-variable\">isAdmin\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">=\u003C\u002Fspan> MapUtils.getBoolean(userData, \u003Cspan class=\"hljs-string\">&quot;isAdmin&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-literal\">false\u003C\u002Fspan>); \u003Cspan class=\"hljs-comment\">\u002F\u002F 返回false\u003C\u002Fspan>\n        \n        System.out.println(\u003Cspan class=\"hljs-string\">&quot;城市：&quot;\u003C\u002Fspan> + cityWithDefault); \u003Cspan class=\"hljs-comment\">\u002F\u002F 输出：城市：未知\u003C\u002Fspan>\n        System.out.println(\u003Cspan class=\"hljs-string\">&quot;姓名：&quot;\u003C\u002Fspan> + name);           \u003Cspan class=\"hljs-comment\">\u002F\u002F 输出：姓名：李四\u003C\u002Fspan>\n    }\n}\u003C\u002Fspan>\u003Cspan rn-wrapper aria-hidden=\"true\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\n        \u003C\u002Fdetails>\n      \u003Ch3 data-line=\"92\" id=\"2.3 Map判空与验证\">2.3 Map判空与验证\u003C\u002Fh3>\n\n        \u003Cdetails  data-line=\"94\" class=\"md-editor-code\" open=\"\">\n          \u003Csummary class=\"md-editor-code-head\">\n            \u003Cdiv class=\"md-editor-code-flag\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fdiv>\n            \u003Cdiv class=\"md-editor-code-action\">\n              \u003Cspan class=\"md-editor-code-lang\">java\u003C\u002Fspan>\n              \u003Cspan class=\"md-editor-copy-button\" data-tips=\"复制代码\">复制代码\u003C\u002Fspan>\n              \n              \u003Cspan class=\"md-editor-collapse-tips\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-circle-chevron-left md-editor-icon\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"m14 16-4-4 4-4\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\n            \u003C\u002Fdiv>\n          \u003C\u002Fsummary>\n          \u003Cpre>\u003Ccode class=\"language-java\" language=java>\u003Cspan class=\"md-editor-code-block\">\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> org.apache.commons.collections4.MapUtils;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.HashMap;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.Map;\n\n\u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">class\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">MapValidationDemo\u003C\u002Fspan> {\n    \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">static\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">void\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">main\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">(String[] args)\u003C\u002Fspan> {\n        Map&lt;String, String&gt; emptyMap = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;();\n        Map&lt;String, String&gt; nullMap = \u003Cspan class=\"hljs-literal\">null\u003C\u002Fspan>;\n        Map&lt;String, String&gt; populatedMap = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;();\n        populatedMap.put(\u003Cspan class=\"hljs-string\">&quot;key&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;value&quot;\u003C\u002Fspan>);\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 判断Map是否为空（包含null检查）\u003C\u002Fspan>\n        System.out.println(MapUtils.isEmpty(emptyMap));   \u003Cspan class=\"hljs-comment\">\u002F\u002F true\u003C\u002Fspan>\n        System.out.println(MapUtils.isEmpty(nullMap));    \u003Cspan class=\"hljs-comment\">\u002F\u002F true\u003C\u002Fspan>\n        System.out.println(MapUtils.isEmpty(populatedMap)); \u003Cspan class=\"hljs-comment\">\u002F\u002F false\u003C\u002Fspan>\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 判断Map是否非空\u003C\u002Fspan>\n        System.out.println(MapUtils.isNotEmpty(emptyMap));   \u003Cspan class=\"hljs-comment\">\u002F\u002F false\u003C\u002Fspan>\n        System.out.println(MapUtils.isNotEmpty(populatedMap)); \u003Cspan class=\"hljs-comment\">\u002F\u002F true\u003C\u002Fspan>\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 安全获取大小（避免NPE）\u003C\u002Fspan>\n        System.out.println(MapUtils.size(nullMap));    \u003Cspan class=\"hljs-comment\">\u002F\u002F 0\u003C\u002Fspan>\n        System.out.println(MapUtils.size(populatedMap)); \u003Cspan class=\"hljs-comment\">\u002F\u002F 1\u003C\u002Fspan>\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 验证Map中是否存在指定的键\u003C\u002Fspan>\n        System.out.println(MapUtils.isNotEmpty(populatedMap)); \u003Cspan class=\"hljs-comment\">\u002F\u002F true\u003C\u002Fspan>\n    }\n}\u003C\u002Fspan>\u003Cspan rn-wrapper aria-hidden=\"true\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\n        \u003C\u002Fdetails>\n      \u003Ch3 data-line=\"125\" id=\"2.4 Map转换与反转\">2.4 Map转换与反转\u003C\u002Fh3>\n\n        \u003Cdetails  data-line=\"127\" class=\"md-editor-code\">\n          \u003Csummary class=\"md-editor-code-head\">\n            \u003Cdiv class=\"md-editor-code-flag\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fdiv>\n            \u003Cdiv class=\"md-editor-code-action\">\n              \u003Cspan class=\"md-editor-code-lang\">java\u003C\u002Fspan>\n              \u003Cspan class=\"md-editor-copy-button\" data-tips=\"复制代码\">复制代码\u003C\u002Fspan>\n              \n              \u003Cspan class=\"md-editor-collapse-tips\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-circle-chevron-left md-editor-icon\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"m14 16-4-4 4-4\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\n            \u003C\u002Fdiv>\n          \u003C\u002Fsummary>\n          \u003Cpre>\u003Ccode class=\"language-java\" language=java>\u003Cspan class=\"md-editor-code-block\">\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> org.apache.commons.collections4.MapUtils;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> org.apache.commons.collections4.Transformer;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> org.apache.commons.collections4.TransformerUtils;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.HashMap;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.Map;\n\n\u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">class\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">MapTransformationDemo\u003C\u002Fspan> {\n    \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">static\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">void\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">main\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">(String[] args)\u003C\u002Fspan> {\n        Map&lt;String, Integer&gt; originalMap = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;();\n        originalMap.put(\u003Cspan class=\"hljs-string\">&quot;apple&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">5\u003C\u002Fspan>);\n        originalMap.put(\u003Cspan class=\"hljs-string\">&quot;banana&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">3\u003C\u002Fspan>);\n        originalMap.put(\u003Cspan class=\"hljs-string\">&quot;orange&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">8\u003C\u002Fspan>);\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 1. 反转Map（键值互换）\u003C\u002Fspan>\n        Map&lt;Integer, String&gt; invertedMap = MapUtils.invertMap(originalMap);\n        System.out.println(\u003Cspan class=\"hljs-string\">&quot;反转后的Map: &quot;\u003C\u002Fspan> + invertedMap);\n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 输出：{5=apple, 3=banana, 8=orange}\u003C\u002Fspan>\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 2. 转换值\u003C\u002Fspan>\n        Transformer&lt;Integer, String&gt; transformer = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">Transformer\u003C\u002Fspan>&lt;Integer, String&gt;() {\n            \u003Cspan class=\"hljs-meta\">@Override\u003C\u002Fspan>\n            \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> String \u003Cspan class=\"hljs-title function_\">transform\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">(Integer input)\u003C\u002Fspan> {\n                \u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan> \u003Cspan class=\"hljs-string\">&quot;数量: &quot;\u003C\u002Fspan> + input;\n            }\n        };\n        \n        Map&lt;String, String&gt; transformedMap = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;();\n        MapUtils.transformValues(originalMap, transformer, transformedMap);\n        System.out.println(\u003Cspan class=\"hljs-string\">&quot;转换后的Map: &quot;\u003C\u002Fspan> + transformedMap);\n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 输出：{apple=数量: 5, banana=数量: 3, orange=数量: 8}\u003C\u002Fspan>\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 3. 使用lambda表达式（Java 8+）\u003C\u002Fspan>\n        MapUtils.transformValues(originalMap, value -&gt; \u003Cspan class=\"hljs-string\">&quot;共&quot;\u003C\u002Fspan> + value + \u003Cspan class=\"hljs-string\">&quot;个&quot;\u003C\u002Fspan>, transformedMap);\n    }\n}\u003C\u002Fspan>\u003Cspan rn-wrapper aria-hidden=\"true\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\n        \u003C\u002Fdetails>\n      \u003Ch3 data-line=\"165\" id=\"2.5 Map合并与比较\">2.5 Map合并与比较\u003C\u002Fh3>\n\n        \u003Cdetails  data-line=\"167\" class=\"md-editor-code\">\n          \u003Csummary class=\"md-editor-code-head\">\n            \u003Cdiv class=\"md-editor-code-flag\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fdiv>\n            \u003Cdiv class=\"md-editor-code-action\">\n              \u003Cspan class=\"md-editor-code-lang\">java\u003C\u002Fspan>\n              \u003Cspan class=\"md-editor-copy-button\" data-tips=\"复制代码\">复制代码\u003C\u002Fspan>\n              \n              \u003Cspan class=\"md-editor-collapse-tips\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-circle-chevron-left md-editor-icon\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"m14 16-4-4 4-4\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\n            \u003C\u002Fdiv>\n          \u003C\u002Fsummary>\n          \u003Cpre>\u003Ccode class=\"language-java\" language=java>\u003Cspan class=\"md-editor-code-block\">\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> org.apache.commons.collections4.MapUtils;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.HashMap;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.Map;\n\n\u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">class\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">MapMergeDemo\u003C\u002Fspan> {\n    \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">static\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">void\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">main\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">(String[] args)\u003C\u002Fspan> {\n        Map&lt;String, Integer&gt; map1 = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;();\n        map1.put(\u003Cspan class=\"hljs-string\">&quot;A&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>);\n        map1.put(\u003Cspan class=\"hljs-string\">&quot;B&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">2\u003C\u002Fspan>);\n        \n        Map&lt;String, Integer&gt; map2 = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;();\n        map2.put(\u003Cspan class=\"hljs-string\">&quot;B&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">20\u003C\u002Fspan>);\n        map2.put(\u003Cspan class=\"hljs-string\">&quot;C&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">3\u003C\u002Fspan>);\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 1. 合并Map（相同键时，值相加）\u003C\u002Fspan>\n        Map&lt;String, Integer&gt; mergedMap = MapUtils.merge(map1, map2, Integer::sum);\n        System.out.println(\u003Cspan class=\"hljs-string\">&quot;合并后的Map: &quot;\u003C\u002Fspan> + mergedMap);\n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 输出：{A=1, B=22, C=3}\u003C\u002Fspan>\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 2. 检查Map是否相等（忽略顺序）\u003C\u002Fspan>\n        Map&lt;String, String&gt; mapA = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;();\n        mapA.put(\u003Cspan class=\"hljs-string\">&quot;1&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;一&quot;\u003C\u002Fspan>);\n        mapA.put(\u003Cspan class=\"hljs-string\">&quot;2&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;二&quot;\u003C\u002Fspan>);\n        \n        Map&lt;String, String&gt; mapB = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;();\n        mapB.put(\u003Cspan class=\"hljs-string\">&quot;2&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;二&quot;\u003C\u002Fspan>);\n        mapB.put(\u003Cspan class=\"hljs-string\">&quot;1&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;一&quot;\u003C\u002Fspan>);\n        \n        \u003Cspan class=\"hljs-type\">boolean\u003C\u002Fspan> \u003Cspan class=\"hljs-variable\">isEqual\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">=\u003C\u002Fspan> MapUtils.isEqualMap(mapA, mapB);\n        System.out.println(\u003Cspan class=\"hljs-string\">&quot;Map是否相等: &quot;\u003C\u002Fspan> + isEqual); \u003Cspan class=\"hljs-comment\">\u002F\u002F 输出：true\u003C\u002Fspan>\n    }\n}\u003C\u002Fspan>\u003Cspan rn-wrapper aria-hidden=\"true\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\n        \u003C\u002Fdetails>\n      \u003Ch3 data-line=\"202\" id=\"2.6 多层嵌套Map操作\">2.6 多层嵌套Map操作\u003C\u002Fh3>\n\n        \u003Cdetails  data-line=\"204\" class=\"md-editor-code\">\n          \u003Csummary class=\"md-editor-code-head\">\n            \u003Cdiv class=\"md-editor-code-flag\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fdiv>\n            \u003Cdiv class=\"md-editor-code-action\">\n              \u003Cspan class=\"md-editor-code-lang\">java\u003C\u002Fspan>\n              \u003Cspan class=\"md-editor-copy-button\" data-tips=\"复制代码\">复制代码\u003C\u002Fspan>\n              \n              \u003Cspan class=\"md-editor-collapse-tips\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-circle-chevron-left md-editor-icon\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"m14 16-4-4 4-4\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\n            \u003C\u002Fdiv>\n          \u003C\u002Fsummary>\n          \u003Cpre>\u003Ccode class=\"language-java\" language=java>\u003Cspan class=\"md-editor-code-block\">\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> org.apache.commons.collections4.MapUtils;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.HashMap;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.Map;\n\n\u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">class\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">NestedMapDemo\u003C\u002Fspan> {\n    \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">static\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">void\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">main\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">(String[] args)\u003C\u002Fspan> {\n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 创建嵌套Map结构\u003C\u002Fspan>\n        Map&lt;String, Object&gt; company = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;();\n        Map&lt;String, Object&gt; department = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;();\n        Map&lt;String, Object&gt; employee = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;();\n        \n        employee.put(\u003Cspan class=\"hljs-string\">&quot;name&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;王五&quot;\u003C\u002Fspan>);\n        employee.put(\u003Cspan class=\"hljs-string\">&quot;age&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">28\u003C\u002Fspan>);\n        employee.put(\u003Cspan class=\"hljs-string\">&quot;position&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;工程师&quot;\u003C\u002Fspan>);\n        \n        department.put(\u003Cspan class=\"hljs-string\">&quot;development&quot;\u003C\u002Fspan>, employee);\n        company.put(\u003Cspan class=\"hljs-string\">&quot;IT&quot;\u003C\u002Fspan>, department);\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 安全获取嵌套值\u003C\u002Fspan>\n        \u003Cspan class=\"hljs-type\">String\u003C\u002Fspan> \u003Cspan class=\"hljs-variable\">employeeName\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">=\u003C\u002Fspan> MapUtils.getString(company, \u003Cspan class=\"hljs-string\">&quot;IT\u002Fdevelopment\u002Fname&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;未知&quot;\u003C\u002Fspan>);\n        \u003Cspan class=\"hljs-type\">Integer\u003C\u002Fspan> \u003Cspan class=\"hljs-variable\">employeeAge\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">=\u003C\u002Fspan> MapUtils.getInteger(company, \u003Cspan class=\"hljs-string\">&quot;IT\u002Fdevelopment\u002Fage&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>);\n        \n        System.out.println(\u003Cspan class=\"hljs-string\">&quot;员工姓名: &quot;\u003C\u002Fspan> + employeeName); \u003Cspan class=\"hljs-comment\">\u002F\u002F 输出：员工姓名: 王五\u003C\u002Fspan>\n        System.out.println(\u003Cspan class=\"hljs-string\">&quot;员工年龄: &quot;\u003C\u002Fspan> + employeeAge); \u003Cspan class=\"hljs-comment\">\u002F\u002F 输出：员工年龄: 28\u003C\u002Fspan>\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 设置嵌套值\u003C\u002Fspan>\n        MapUtils.setProperty(company, \u003Cspan class=\"hljs-string\">&quot;IT\u002Fdevelopment\u002Fsalary&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">15000.0\u003C\u002Fspan>);\n        \u003Cspan class=\"hljs-type\">Double\u003C\u002Fspan> \u003Cspan class=\"hljs-variable\">salary\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">=\u003C\u002Fspan> MapUtils.getDouble(company, \u003Cspan class=\"hljs-string\">&quot;IT\u002Fdevelopment\u002Fsalary&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">0.0\u003C\u002Fspan>);\n        System.out.println(\u003Cspan class=\"hljs-string\">&quot;员工薪资: &quot;\u003C\u002Fspan> + salary); \u003Cspan class=\"hljs-comment\">\u002F\u002F 输出：员工薪资: 15000.0\u003C\u002Fspan>\n    }\n}\u003C\u002Fspan>\u003Cspan rn-wrapper aria-hidden=\"true\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\n        \u003C\u002Fdetails>\n      \u003Ch3 data-line=\"238\" id=\"2.7 迭代与过滤\">2.7 迭代与过滤\u003C\u002Fh3>\n\n        \u003Cdetails  data-line=\"240\" class=\"md-editor-code\">\n          \u003Csummary class=\"md-editor-code-head\">\n            \u003Cdiv class=\"md-editor-code-flag\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fdiv>\n            \u003Cdiv class=\"md-editor-code-action\">\n              \u003Cspan class=\"md-editor-code-lang\">java\u003C\u002Fspan>\n              \u003Cspan class=\"md-editor-copy-button\" data-tips=\"复制代码\">复制代码\u003C\u002Fspan>\n              \n              \u003Cspan class=\"md-editor-collapse-tips\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-circle-chevron-left md-editor-icon\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"m14 16-4-4 4-4\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\n            \u003C\u002Fdiv>\n          \u003C\u002Fsummary>\n          \u003Cpre>\u003Ccode class=\"language-java\" language=java>\u003Cspan class=\"md-editor-code-block\">\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> org.apache.commons.collections4.MapUtils;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> org.apache.commons.collections4.Predicate;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> org.apache.commons.collections4.Transformer;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.HashMap;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.Map;\n\n\u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">class\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">MapIterationDemo\u003C\u002Fspan> {\n    \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">static\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">void\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">main\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">(String[] args)\u003C\u002Fspan> {\n        Map&lt;String, Integer&gt; scores = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;();\n        scores.put(\u003Cspan class=\"hljs-string\">&quot;张三&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">85\u003C\u002Fspan>);\n        scores.put(\u003Cspan class=\"hljs-string\">&quot;李四&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">92\u003C\u002Fspan>);\n        scores.put(\u003Cspan class=\"hljs-string\">&quot;王五&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">78\u003C\u002Fspan>);\n        scores.put(\u003Cspan class=\"hljs-string\">&quot;赵六&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">95\u003C\u002Fspan>);\n        scores.put(\u003Cspan class=\"hljs-string\">&quot;钱七&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">60\u003C\u002Fspan>);\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 1. 过滤符合条件的条目\u003C\u002Fspan>\n        Predicate&lt;Integer&gt; highScorePredicate = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">Predicate\u003C\u002Fspan>&lt;Integer&gt;() {\n            \u003Cspan class=\"hljs-meta\">@Override\u003C\u002Fspan>\n            \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-type\">boolean\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">evaluate\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">(Integer score)\u003C\u002Fspan> {\n                \u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan> score &gt;= \u003Cspan class=\"hljs-number\">90\u003C\u002Fspan>;\n            }\n        };\n        \n        Map&lt;String, Integer&gt; highScores = MapUtils.filterValues(scores, highScorePredicate);\n        System.out.println(\u003Cspan class=\"hljs-string\">&quot;高分学生: &quot;\u003C\u002Fspan> + highScores);\n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 输出：高分学生: {李四=92, 赵六=95}\u003C\u002Fspan>\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 2. 使用lambda表达式（Java 8+）\u003C\u002Fspan>\n        Map&lt;String, Integer&gt; passedScores = MapUtils.filterValues(scores, score -&gt; score &gt;= \u003Cspan class=\"hljs-number\">60\u003C\u002Fspan>);\n        System.out.println(\u003Cspan class=\"hljs-string\">&quot;及格学生: &quot;\u003C\u002Fspan> + passedScores);\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 3. 转换键\u003C\u002Fspan>\n        Transformer&lt;String, String&gt; keyTransformer = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">Transformer\u003C\u002Fspan>&lt;String, String&gt;() {\n            \u003Cspan class=\"hljs-meta\">@Override\u003C\u002Fspan>\n            \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> String \u003Cspan class=\"hljs-title function_\">transform\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">(String name)\u003C\u002Fspan> {\n                \u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan> \u003Cspan class=\"hljs-string\">&quot;学生-&quot;\u003C\u002Fspan> + name;\n            }\n        };\n        \n        Map&lt;String, Integer&gt; transformedKeys = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;();\n        MapUtils.transformKeys(scores, keyTransformer, transformedKeys);\n        System.out.println(\u003Cspan class=\"hljs-string\">&quot;转换键后的Map: &quot;\u003C\u002Fspan> + transformedKeys);\n    }\n}\u003C\u002Fspan>\u003Cspan rn-wrapper aria-hidden=\"true\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\n        \u003C\u002Fdetails>\n      \u003Ch2 data-line=\"287\" id=\"三、实际应用案例\">三、实际应用案例\u003C\u002Fh2>\n\u003Ch3 data-line=\"289\" id=\"3.1 配置管理系统\">3.1 配置管理系统\u003C\u002Fh3>\n\n        \u003Cdetails  data-line=\"291\" class=\"md-editor-code\">\n          \u003Csummary class=\"md-editor-code-head\">\n            \u003Cdiv class=\"md-editor-code-flag\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fdiv>\n            \u003Cdiv class=\"md-editor-code-action\">\n              \u003Cspan class=\"md-editor-code-lang\">java\u003C\u002Fspan>\n              \u003Cspan class=\"md-editor-copy-button\" data-tips=\"复制代码\">复制代码\u003C\u002Fspan>\n              \n              \u003Cspan class=\"md-editor-collapse-tips\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-circle-chevron-left md-editor-icon\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"m14 16-4-4 4-4\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\n            \u003C\u002Fdiv>\n          \u003C\u002Fsummary>\n          \u003Cpre>\u003Ccode class=\"language-java\" language=java>\u003Cspan class=\"md-editor-code-block\">\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> org.apache.commons.collections4.MapUtils;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.HashMap;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.Map;\n\n\u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">class\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">ConfigurationManager\u003C\u002Fspan> {\n    \u003Cspan class=\"hljs-keyword\">private\u003C\u002Fspan> Map&lt;String, Object&gt; config = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;();\n    \n    \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">ConfigurationManager\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">()\u003C\u002Fspan> {\n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 初始化默认配置\u003C\u002Fspan>\n        config.put(\u003Cspan class=\"hljs-string\">&quot;app.name&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;MyApplication&quot;\u003C\u002Fspan>);\n        config.put(\u003Cspan class=\"hljs-string\">&quot;app.version&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;1.0.0&quot;\u003C\u002Fspan>);\n        config.put(\u003Cspan class=\"hljs-string\">&quot;database.host&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;localhost&quot;\u003C\u002Fspan>);\n        config.put(\u003Cspan class=\"hljs-string\">&quot;database.port&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">3306\u003C\u002Fspan>);\n        config.put(\u003Cspan class=\"hljs-string\">&quot;server.timeout&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">30000\u003C\u002Fspan>);\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> String \u003Cspan class=\"hljs-title function_\">getString\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">(String key)\u003C\u002Fspan> {\n        \u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan> MapUtils.getString(config, key, \u003Cspan class=\"hljs-string\">&quot;&quot;\u003C\u002Fspan>);\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-type\">int\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">getInt\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">(String key)\u003C\u002Fspan> {\n        \u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan> MapUtils.getInteger(config, key, \u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>);\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-type\">boolean\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">getBoolean\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">(String key)\u003C\u002Fspan> {\n        \u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan> MapUtils.getBoolean(config, key, \u003Cspan class=\"hljs-literal\">false\u003C\u002Fspan>);\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">void\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">updateConfig\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">(Map&lt;String, Object&gt; newConfig)\u003C\u002Fspan> {\n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 安全合并配置\u003C\u002Fspan>\n        MapUtils.merge(config, newConfig, (oldVal, newVal) -&gt; newVal);\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">void\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">printConfig\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">()\u003C\u002Fspan> {\n        System.out.println(\u003Cspan class=\"hljs-string\">&quot;当前配置:&quot;\u003C\u002Fspan>);\n        config.forEach((key, value) -&gt; \n            System.out.println(key + \u003Cspan class=\"hljs-string\">&quot; = &quot;\u003C\u002Fspan> + value));\n    }\n}\u003C\u002Fspan>\u003Cspan rn-wrapper aria-hidden=\"true\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\n        \u003C\u002Fdetails>\n      \u003Ch3 data-line=\"333\" id=\"3.2 数据转换工具\">3.2 数据转换工具\u003C\u002Fh3>\n\n        \u003Cdetails  data-line=\"335\" class=\"md-editor-code\">\n          \u003Csummary class=\"md-editor-code-head\">\n            \u003Cdiv class=\"md-editor-code-flag\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fdiv>\n            \u003Cdiv class=\"md-editor-code-action\">\n              \u003Cspan class=\"md-editor-code-lang\">java\u003C\u002Fspan>\n              \u003Cspan class=\"md-editor-copy-button\" data-tips=\"复制代码\">复制代码\u003C\u002Fspan>\n              \n              \u003Cspan class=\"md-editor-collapse-tips\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-circle-chevron-left md-editor-icon\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"m14 16-4-4 4-4\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\n            \u003C\u002Fdiv>\n          \u003C\u002Fsummary>\n          \u003Cpre>\u003Ccode class=\"language-java\" language=java>\u003Cspan class=\"md-editor-code-block\">\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> org.apache.commons.collections4.MapUtils;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> org.apache.commons.collections4.Transformer;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.HashMap;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.Map;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.List;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.Arrays;\n\n\u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">class\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">DataTransformer\u003C\u002Fspan> {\n    \n    \u003Cspan class=\"hljs-comment\">\u002F**\n     * 将对象转换为Map\n     *\u002F\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">static\u003C\u002Fspan> Map&lt;String, Object&gt; \u003Cspan class=\"hljs-title function_\">objectToMap\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">(Object obj)\u003C\u002Fspan> {\n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 实际应用中，这里可以使用反射获取对象属性\u003C\u002Fspan>\n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 这里简化示例\u003C\u002Fspan>\n        Map&lt;String, Object&gt; map = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;();\n        \u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan> (obj \u003Cspan class=\"hljs-keyword\">instanceof\u003C\u002Fspan> User) {\n            \u003Cspan class=\"hljs-type\">User\u003C\u002Fspan> \u003Cspan class=\"hljs-variable\">user\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">=\u003C\u002Fspan> (User) obj;\n            map.put(\u003Cspan class=\"hljs-string\">&quot;id&quot;\u003C\u002Fspan>, user.getId());\n            map.put(\u003Cspan class=\"hljs-string\">&quot;name&quot;\u003C\u002Fspan>, user.getName());\n            map.put(\u003Cspan class=\"hljs-string\">&quot;email&quot;\u003C\u002Fspan>, user.getEmail());\n        }\n        \u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan> map;\n    }\n    \n    \u003Cspan class=\"hljs-comment\">\u002F**\n     * 从Map中安全提取数据创建对象\n     *\u002F\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">static\u003C\u002Fspan> User \u003Cspan class=\"hljs-title function_\">mapToUser\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">(Map&lt;String, Object&gt; map)\u003C\u002Fspan> {\n        \u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan> (MapUtils.isEmpty(map)) {\n            \u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan> \u003Cspan class=\"hljs-literal\">null\u003C\u002Fspan>;\n        }\n        \n        \u003Cspan class=\"hljs-type\">User\u003C\u002Fspan> \u003Cspan class=\"hljs-variable\">user\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">=\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">User\u003C\u002Fspan>();\n        user.setId(MapUtils.getLong(map, \u003Cspan class=\"hljs-string\">&quot;id&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">0L\u003C\u002Fspan>));\n        user.setName(MapUtils.getString(map, \u003Cspan class=\"hljs-string\">&quot;name&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;&quot;\u003C\u002Fspan>));\n        user.setEmail(MapUtils.getString(map, \u003Cspan class=\"hljs-string\">&quot;email&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;&quot;\u003C\u002Fspan>));\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan> user;\n    }\n    \n    \u003Cspan class=\"hljs-comment\">\u002F**\n     * 过滤敏感信息\n     *\u002F\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">static\u003C\u002Fspan> Map&lt;String, Object&gt; \u003Cspan class=\"hljs-title function_\">filterSensitiveData\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">(Map&lt;String, Object&gt; data)\u003C\u002Fspan> {\n        List&lt;String&gt; sensitiveKeys = Arrays.asList(\u003Cspan class=\"hljs-string\">&quot;password&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;token&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">&quot;creditCard&quot;\u003C\u002Fspan>);\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan> MapUtils.filterKeys(data, key -&gt; \n            !sensitiveKeys.contains(key) &amp;&amp; !key.contains(\u003Cspan class=\"hljs-string\">&quot;secret&quot;\u003C\u002Fspan>));\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">static\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">class\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">User\u003C\u002Fspan> {\n        \u003Cspan class=\"hljs-keyword\">private\u003C\u002Fspan> Long id;\n        \u003Cspan class=\"hljs-keyword\">private\u003C\u002Fspan> String name;\n        \u003Cspan class=\"hljs-keyword\">private\u003C\u002Fspan> String email;\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 省略getter\u002Fsetter\u003C\u002Fspan>\n    }\n}\u003C\u002Fspan>\u003Cspan rn-wrapper aria-hidden=\"true\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\n        \u003C\u002Fdetails>\n      \u003Ch2 data-line=\"397\" id=\"四、性能考虑与最佳实践\">四、性能考虑与最佳实践\u003C\u002Fh2>\n\u003Ch3 data-line=\"399\" id=\"4.1 性能建议\">4.1 性能建议\u003C\u002Fh3>\n\u003Col data-line=\"401\">\n\u003Cli data-line=\"401\">\u003Cstrong>缓存MapUtils的结果\u003C\u002Fstrong>：如果频繁使用相同的转换操作，考虑缓存结果\u003C\u002Fli>\n\u003Cli data-line=\"402\">\u003Cstrong>避免过度包装\u003C\u002Fstrong>：简单的操作直接使用标准Map方法\u003C\u002Fli>\n\u003Cli data-line=\"403\">\u003Cstrong>注意类型安全\u003C\u002Fstrong>：使用泛型确保类型安全\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3 data-line=\"405\" id=\"4.2 最佳实践\">4.2 最佳实践\u003C\u002Fh3>\n\n        \u003Cdetails  data-line=\"407\" class=\"md-editor-code\">\n          \u003Csummary class=\"md-editor-code-head\">\n            \u003Cdiv class=\"md-editor-code-flag\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fdiv>\n            \u003Cdiv class=\"md-editor-code-action\">\n              \u003Cspan class=\"md-editor-code-lang\">java\u003C\u002Fspan>\n              \u003Cspan class=\"md-editor-copy-button\" data-tips=\"复制代码\">复制代码\u003C\u002Fspan>\n              \n              \u003Cspan class=\"md-editor-collapse-tips\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-circle-chevron-left md-editor-icon\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"m14 16-4-4 4-4\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\n            \u003C\u002Fdiv>\n          \u003C\u002Fsummary>\n          \u003Cpre>\u003Ccode class=\"language-java\" language=java>\u003Cspan class=\"md-editor-code-block\">\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> org.apache.commons.collections4.MapUtils;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.Collections;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.HashMap;\n\u003Cspan class=\"hljs-keyword\">import\u003C\u002Fspan> java.util.Map;\n\n\u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">class\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">BestPractices\u003C\u002Fspan> {\n    \n    \u003Cspan class=\"hljs-comment\">\u002F\u002F 1. 使用不可变Map保护数据\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> Map&lt;String, Object&gt; \u003Cspan class=\"hljs-title function_\">getImmutableConfig\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">()\u003C\u002Fspan> {\n        Map&lt;String, Object&gt; config = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;();\n        config.put(\u003Cspan class=\"hljs-string\">&quot;timeout&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">5000\u003C\u002Fspan>);\n        config.put(\u003Cspan class=\"hljs-string\">&quot;retries&quot;\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">3\u003C\u002Fspan>);\n        \u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan> Collections.unmodifiableMap(config);\n    }\n    \n    \u003Cspan class=\"hljs-comment\">\u002F\u002F 2. 链式操作\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">void\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">processUserData\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">(Map&lt;String, Object&gt; userData)\u003C\u002Fspan> {\n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 先过滤，再转换\u003C\u002Fspan>\n        Map&lt;String, Object&gt; filtered = MapUtils.filterKeys(userData, \n            key -&gt; !key.startsWith(\u003Cspan class=\"hljs-string\">&quot;_&quot;\u003C\u002Fspan>));\n        \n        Map&lt;String, String&gt; transformed = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;();\n        MapUtils.transformValues(filtered, \n            value -&gt; value == \u003Cspan class=\"hljs-literal\">null\u003C\u002Fspan> ? \u003Cspan class=\"hljs-string\">&quot;&quot;\u003C\u002Fspan> : value.toString(), \n            transformed);\n    }\n    \n    \u003Cspan class=\"hljs-comment\">\u002F\u002F 3. 防御性编程\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> String \u003Cspan class=\"hljs-title function_\">safeGetValue\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">(Map&lt;String, Object&gt; map, String key)\u003C\u002Fspan> {\n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 总是提供默认值\u003C\u002Fspan>\n        \u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan> MapUtils.getString(map, key, \u003Cspan class=\"hljs-string\">&quot;DEFAULT_VALUE&quot;\u003C\u002Fspan>);\n    }\n    \n    \u003Cspan class=\"hljs-comment\">\u002F\u002F 4. 使用Java 8+的增强功能\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-keyword\">public\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">void\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">modernJavaFeatures\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">()\u003C\u002Fspan> {\n        Map&lt;String, Integer&gt; scores = \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-title class_\">HashMap\u003C\u002Fspan>&lt;&gt;();\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 使用Lambda表达式\u003C\u002Fspan>\n        MapUtils.filterValues(scores, score -&gt; score &gt; \u003Cspan class=\"hljs-number\">80\u003C\u002Fspan>);\n        \n        \u003Cspan class=\"hljs-comment\">\u002F\u002F 使用方法引用\u003C\u002Fspan>\n        MapUtils.transformValues(scores, String::valueOf);\n    }\n}\u003C\u002Fspan>\u003Cspan rn-wrapper aria-hidden=\"true\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\n        \u003C\u002Fdetails>\n      \u003Ch2 data-line=\"454\" id=\"五、总结\">五、总结\u003C\u002Fh2>\n\u003Cp data-line=\"456\">\u003Ccode>MapUtils\u003C\u002Fcode>是Apache Commons Collections库中一个强大而实用的工具类，它为Java Map操作提供了：\u003C\u002Fp>\n\u003Col data-line=\"458\">\n\u003Cli data-line=\"458\">\u003Cstrong>安全性\u003C\u002Fstrong>：避免NullPointerException\u003C\u002Fli>\n\u003Cli data-line=\"459\">\u003Cstrong>便捷性\u003C\u002Fstrong>：简化常见操作\u003C\u002Fli>\n\u003Cli data-line=\"460\">\u003Cstrong>功能性\u003C\u002Fstrong>：提供标准库没有的高级功能\u003C\u002Fli>\n\u003Cli data-line=\"461\">\u003Cstrong>可读性\u003C\u002Fstrong>：使代码更清晰易懂\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp data-line=\"463\">尽管现代Java版本（特别是Java 8+）引入了Stream API等新特性，\u003Ccode>MapUtils\u003C\u002Fcode>在某些场景下仍然有其独特价值，特别是在处理多层嵌套结构、需要向后兼容或团队已经依赖Commons库的项目中。\u003C\u002Fp>\n\u003Cp data-line=\"465\">选择使用\u003Ccode>MapUtils\u003C\u002Fcode>还是Java标准库的新特性，应根据具体项目需求、团队熟悉度和性能要求来决定。在大多数情况下，两者可以结合使用，发挥各自优势。\u003C\u002Fp>\n\u003Ch2 data-line=\"467\" id=\"六、扩展学习\">六、扩展学习\u003C\u002Fh2>\n\u003Col data-line=\"469\">\n\u003Cli data-line=\"469\">\u003Cstrong>官方文档\u003C\u002Fstrong>：查阅\u003Ca href=\"https:\u002F\u002Fcommons.apache.org\u002Fproper\u002Fcommons-collections\u002F\">https:\u002F\u002Fcommons.apache.org\u002Fproper\u002Fcommons-collections\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli data-line=\"470\">\u003Cstrong>源码学习\u003C\u002Fstrong>：研究\u003Ccode>MapUtils\u003C\u002Fcode>源码理解实现原理\u003C\u002Fli>\n\u003Cli data-line=\"471\">\u003Cstrong>相关工具\u003C\u002Fstrong>：了解\u003Ccode>CollectionUtils\u003C\u002Fcode>、\u003Ccode>ListUtils\u003C\u002Fcode>等相关工具类\u003C\u002Fli>\n\u003Cli data-line=\"472\">\u003Cstrong>替代方案\u003C\u002Fstrong>：探索Google Guava库的类似功能\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp data-line=\"474\">通过掌握\u003Ccode>MapUtils\u003C\u002Fcode>，你将能够更高效、更安全地处理Java中的Map数据结构，提升代码质量和开发效率。\u003C\u002Fp>\n",12935,43,"0","",2,0,7,"&quot,MapUtils,String,Map,Map&lt","引言\n在Java开发中，Map（映射）是一种极为常用的数据结构，用于存储键值对。虽然Java标准库提供了丰富的Map操作方法，但在实际开发中，我们经常需要更复杂、更便捷的操作。这正是Apache Commons Collections库中MapUtils发挥作用的地方。本文将深入探讨MapUtils的使用，展示它如何简化Map操作，提高代码的可读性和效率。","2025-12-20 23:31:51"]