【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全部方法列表
- 五、注意事项与最佳实践
- 六、总结
MapUtils
是 Apache 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)
- 功能:若
Map
为null
,返回空集合;否则返回原集合。 - 示例:
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)
Map
为 null
,返回空集合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
)五、注意事项与最佳实践
-
依赖版本:
- 使用
commons-collections4
,避免与旧版本commons-collections
冲突。
- 使用
-
类型安全:
- 在获取值时,确保键的类型与
Map
的键类型一致,避免类型转换异常。
- 在获取值时,确保键的类型与
-
不可变集合:
- 使用
unmodifiableMap
后,尝试修改Map
会抛出UnsupportedOperationException
。
- 使用
-
性能优化:
- 避免频繁使用
invertMap
或transformedMap
,这些方法会创建新集合。
- 避免频繁使用
-
默认值处理:
- 使用带默认值的方法(如
getString(..., \"default\")
)避免NullPointerException
。
- 使用带默认值的方法(如
六、总结
MapUtils
是 Apache Commons Collections 中不可或缺的工具类,极大简化了 Java Map
的常见操作。通过其丰富的 API,开发者可以轻松实现 空值判断、值获取、类型转换、不可变Map创建、集合操作 等功能。在实际开发中,合理使用 MapUtils
能显著提升代码的简洁性和可维护性。