> 技术文档 > 【Java第67集】java MapUtils工具类详解

【Java第67集】java MapUtils工具类详解


文章目录

  • 一、依赖引入
  • 二、核心方法分类及示例
    • 1. 空值判断
      • 1.1 `isEmpty(Map map)`
      • 1.2 `isNotEmpty(Map map)`
      • 1.3 `emptyIfNull(Map map)`
    • 2. 值获取与类型转换
      • 2.1 `getString(Map map, Object key)`
      • 2.2 `getString(Map map, Object key, String defaultValue)`
      • 2.3 `getInteger(Map map, Object key)`
      • 2.4 `getInteger(Map map, Object key, Integer defaultValue)`
      • 2.5 其他类型转换方法
    • 3. Map 操作
      • 3.1 `putAll(Map target, Map source)`
      • 3.2 `putAll(Map target, Object... keyValuePairs)`
      • 3.3 `invertMap(Map map)`
    • 4. 不可变 Map 创建
      • 4.1 `unmodifiableMap(Map map)`
      • 4.2 `fixedSizeMap(Map map)`
    • 5. 多值 Map 操作
      • 5.1 `multiValueMap()`
    • 6. 其他实用方法
      • 6.1 `transformedMap(Map map, Transformer valueTransformer)`
      • 6.2 `synchronizedMap(Map map)`
  • 三、典型应用场景
    • 1. 获取默认值
    • 2. 合并 Map
    • 3. 键值对调
  • 四、MapUtils全部方法列表
  • 五、注意事项与最佳实践
  • 六、总结

MapUtilsApache Commons Collections 库中的一个核心工具类,用于简化对 Map 的操作。它提供了丰富的静态方法,涵盖 空值判断、值获取、类型转换、不可变Map创建、集合操作 等常见任务,显著减少冗余代码并提高开发效率。

一、依赖引入

使用 MapUtils 需要引入 Apache Commons Collections 的依赖:

<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.4</version></dependency>

二、核心方法分类及示例

1. 空值判断

1.1 isEmpty(Map map)

  • 功能:判断 Map 是否为 null 或空(即不包含任何键值对)。
  • 示例
    Map<String, String> map = new HashMap<>();boolean isEmpty = MapUtils.isEmpty(map); // true

1.2 isNotEmpty(Map map)

  • 功能:判断 Map 是否非空。
  • 示例
    Map<String, String> map = new HashMap<>();map.put(\"key\", \"value\");boolean isNotEmpty = MapUtils.isNotEmpty(map); // true

1.3 emptyIfNull(Map map)

  • 功能:若 Mapnull,返回空集合;否则返回原集合。
  • 示例
    Map<String, String> safeMap = MapUtils.emptyIfNull(null);System.out.println(safeMap); // {}

2. 值获取与类型转换

2.1 getString(Map map, Object key)

  • 功能:从 Map 中获取 String 类型的值。
  • 示例
    Map<String, Object> map = new HashMap<>();map.put(\"name\", \"John\");String name = MapUtils.getString(map, \"name\"); // \"John\"

2.2 getString(Map map, Object key, String defaultValue)

  • 功能:获取 String 类型值,并指定默认值。
  • 示例
    String name = MapUtils.getString(map, \"age\", \"Unknown\"); // \"Unknown\"

2.3 getInteger(Map map, Object key)

  • 功能:获取 Integer 类型值。
  • 示例
    Map<String, Object> map = new HashMap<>();map.put(\"age\", 25);Integer age = MapUtils.getInteger(map, \"age\"); // 25

2.4 getInteger(Map map, Object key, Integer defaultValue)

  • 功能:获取 Integer 类型值,并指定默认值。
  • 示例
    Integer money = MapUtils.getInteger(map, \"money\", 100); // 100

2.5 其他类型转换方法

方法名 功能 getBoolean 获取 Boolean 类型值 getLong 获取 Long 类型值 getFloat 获取 Float 类型值 getDouble 获取 Double 类型值 getNumber 获取 Number 类型值 getObject 获取任意类型的值

3. Map 操作

3.1 putAll(Map target, Map source)

  • 功能:将 source 的键值对添加到 target 中。
  • 示例
    Map<String, String> source = new HashMap<>();source.put(\"key1\", \"value1\");Map<String, String> target = new HashMap<>();MapUtils.putAll(target, source);System.out.println(target); // {key1=value1}

3.2 putAll(Map target, Object... keyValuePairs)

  • 功能:将键值对数组添加到 target 中。
  • 示例
    Map<String, String> map = new HashMap<>();MapUtils.putAll(map, \"color\", \"red\", \"size\", \"XL\");System.out.println(map); // {color=red, size=XL}

3.3 invertMap(Map map)

  • 功能:返回一个键值对调的新 Map
  • 示例
    Map<String, String> map = new HashMap<>();map.put(\"RED\", \"#FF0000\");Map<String, String> inverted = MapUtils.invertMap(map);System.out.println(inverted); // {#FF0000=RED}

4. 不可变 Map 创建

4.1 unmodifiableMap(Map map)

  • 功能:创建一个不可变的 Map
  • 示例
    Map<String, String> unmodifiable = MapUtils.unmodifiableMap(map);unmodifiable.put(\"newKey\", \"newValue\"); // 抛出 UnsupportedOperationException

4.2 fixedSizeMap(Map map)

  • 功能:创建一个固定大小的 Map(不可新增或删除元素)。
  • 示例
    Map<String, String> fixedMap = MapUtils.fixedSizeMap(new HashMap<>());fixedMap.put(\"key\", \"value\");fixedMap.remove(\"key\"); // 抛出 UnsupportedOperationException

5. 多值 Map 操作

5.1 multiValueMap()

  • 功能:创建一个支持多值的 Map(一个键对应多个值)。
  • 示例
    MultiValuedMap<String, String> multiMap = new ArrayListValuedHashMap<>();multiMap.put(\"fruits\", \"apple\");multiMap.put(\"fruits\", \"banana\");System.out.println(multiMap.get(\"fruits\")); // [apple, banana]

6. 其他实用方法

6.1 transformedMap(Map map, Transformer valueTransformer)

  • 功能:对 Map 的值进行转换。
  • 示例
    Map<String, String> transformedMap = MapUtils.transformedMap( new HashMap<>(), value -> value.toUpperCase());transformedMap.put(\"key\", \"value\");System.out.println(transformedMap.get(\"key\")); // \"VALUE\"

6.2 synchronizedMap(Map map)

  • 功能:创建线程安全的 Map
  • 示例
    Map<String, String> synchronizedMap = MapUtils.synchronizedMap(new HashMap<>());

三、典型应用场景

1. 获取默认值

Map<String, Object> user = new HashMap<>();user.put(\"name\", \"Alice\");String name = MapUtils.getString(user, \"name\", \"Unknown\"); // \"Alice\"int age = MapUtils.getInteger(user, \"age\", 18); // 18

2. 合并 Map

Map<String, String> map1 = MapUtils.putAll(new HashMap<>(), \"color\", \"red\", \"size\", \"XL\");Map<String, String> map2 = MapUtils.putAll(new HashMap<>(), \"material\", \"cotton\");Map<String, String> merged = new HashMap<>(map1);MapUtils.putAll(merged, map2);System.out.println(merged); // {color=red, size=XL, material=cotton}

3. 键值对调

Map<String, String> colorMap = new HashMap<>();colorMap.put(\"RED\", \"#FF0000\");colorMap.put(\"GREEN\", \"#00FF00\");Map<String, String> inverted = MapUtils.invertMap(colorMap);System.out.println(inverted.get(\"#FF0000\")); // \"RED\"

四、MapUtils全部方法列表

方法名 功能 isEmpty(Map map) 判断 Map 是否为空 isNotEmpty(Map map) 判断 Map 是否非空 emptyIfNull(Map map)Mapnull,返回空集合 getString(Map map, Object key) 获取 String 类型值 getString(Map map, Object key, String defaultValue) 获取 String 类型值并指定默认值 getInteger(Map map, Object key) 获取 Integer 类型值 getInteger(Map map, Object key, Integer defaultValue) 获取 Integer 类型值并指定默认值 putAll(Map target, Map source) 合并两个 Map putAll(Map target, Object... keyValuePairs) 添加键值对数组到 Map invertMap(Map map) 返回键值对调的新 Map unmodifiableMap(Map map) 创建不可变 Map fixedSizeMap(Map map) 创建固定大小的 Map transformedMap(Map map, Transformer valueTransformer) 转换 Map 的值 synchronizedMap(Map map) 创建线程安全的 Map multiValueMap() 创建支持多值的 Map(需使用 MultiValuedMap

五、注意事项与最佳实践

  1. 依赖版本

    • 使用 commons-collections4,避免与旧版本 commons-collections 冲突。
  2. 类型安全

    • 在获取值时,确保键的类型与 Map 的键类型一致,避免类型转换异常。
  3. 不可变集合

    • 使用 unmodifiableMap 后,尝试修改 Map 会抛出 UnsupportedOperationException
  4. 性能优化

    • 避免频繁使用 invertMaptransformedMap,这些方法会创建新集合。
  5. 默认值处理

    • 使用带默认值的方法(如 getString(..., \"default\"))避免 NullPointerException

六、总结

MapUtils 是 Apache Commons Collections 中不可或缺的工具类,极大简化了 Java Map 的常见操作。通过其丰富的 API,开发者可以轻松实现 空值判断、值获取、类型转换、不可变Map创建、集合操作 等功能。在实际开发中,合理使用 MapUtils 能显著提升代码的简洁性和可维护性。