MapGetUtil
# 功能介绍
MapGetUtil是Hutool中用于从Map中获取值的工具类,提供了丰富的方法来便捷地获取不同类型的值。它支持自动类型转换、默认值处理、链式获取嵌套Map的值等功能,大大简化了Map值的获取操作。
# 主要特性
- 支持自动类型转换(如String转Integer、Long转Double等)
- 支持设置默认值,避免空指针异常
- 支持链式获取嵌套Map的值
- 支持获取集合类型值(List、Set、Map等)
- 支持获取基本类型值及其包装类型
- 支持获取日期、时间类型值
# 适用场景
- 需要从Map中获取不同类型的值
- 需要处理可能为空的值,避免空指针异常
- 需要从嵌套Map中获取深层值
- 需要自动转换值类型
- 需要获取集合类型值
# 使用示例
# 示例1:基本用法
// 创建Map
Map<String, Object> map = MapUtil.of(
"name", "hutool",
"version", "7.0.0",
"author", "looly",
"stars", 10000,
"isActive", true
);
// 获取字符串值
String name = MapGetUtil.getString(map, "name");
// 输出: hutool
// 获取整数值(自动转换)
int version = MapGetUtil.getInt(map, "version");
// 输出: 700
// 获取长整型值
long stars = MapGetUtil.getLong(map, "stars");
// 输出: 10000
// 获取布尔值
boolean isActive = MapGetUtil.getBoolean(map, "isActive");
// 输出: true
# 示例2:设置默认值
// 创建Map
Map<String, Object> map = MapUtil.of(
"name", "hutool",
"version", "7.0.0"
);
// 获取存在的键,返回对应值
String name = MapGetUtil.getString(map, "name", "default");
// 输出: hutool
// 获取不存在的键,返回默认值
String author = MapGetUtil.getString(map, "author", "unknown");
// 输出: unknown
// 获取不存在的整型值,返回默认值
int downloads = MapGetUtil.getInt(map, "downloads", 0);
// 输出: 0
# 示例3:获取嵌套Map的值
// 创建嵌套Map
Map<String, Object> nestedMap = MapUtil.of(
"name", "hutool",
"info", MapUtil.of(
"version", "7.0.0",
"author", "looly",
"details", MapUtil.of(
"stars", 10000,
"downloads", 500000
)
)
);
// 链式获取嵌套值
String version = MapGetUtil.getString(nestedMap, "info.version");
// 输出: 700
// 获取深层嵌套值
long downloads = MapGetUtil.getLong(nestedMap, "info.details.downloads");
// 输出: 500000
// 获取不存在的嵌套值,返回默认值
String license = MapGetUtil.getString(nestedMap, "info.license", "Apache-2.0");
// 输出: Apache-2.0
# 示例4:获取集合类型值
// 创建包含集合的Map
Map<String, Object> map = MapUtil.of(
"name", "hutool",
"tags", ListUtil.of("java", "tool", "util"),
"contributors", SetUtil.of("looly", "张三", "李四"),
"versions", MapUtil.of(
"current", "7.0.0",
"previous", "6.0.0"
)
);
// 获取List类型值
List<String> tags = MapGetUtil.getList(map, "tags", String.class);
// 输出: [java, tool, util]
// 获取Set类型值
Set<String> contributors = MapGetUtil.getSet(map, "contributors", String.class);
// 输出: [looly, 张三, 李四]
// 获取Map类型值
Map<String, String> versions = MapGetUtil.getMap(map, "versions", String.class, String.class);
// 输出: {current=7.0.0, previous=6.0.0}
# 注意事项
- MapGetUtil支持多种类型转换,但对于复杂类型转换可能会失败
- 对于嵌套Map的链式获取,默认使用点号(.)作为分隔符
- 当获取的值为null且未设置默认值时,返回对应类型的默认值(如0、false、null等)
- 对于集合类型的获取,需要指定泛型类型,否则返回的是Object类型的集合
- MapGetUtil是线程安全的,可以在多线程环境下使用
# 方法列表
| 方法名 | 描述 | 参数 | 返回值 |
|---|---|---|---|
| getString(Map<?, ?> map, String key) | 获取字符串值 | map: Map对象, key: 键 | String |
| getString(Map<?, ?> map, String key, String defaultValue) | 获取字符串值,带默认值 | map: Map对象, key: 键, defaultValue: 默认值 | String |
| getInt(Map<?, ?> map, String key) | 获取整数值 | map: Map对象, key: 键 | int |
| getInt(Map<?, ?> map, String key, int defaultValue) | 获取整数值,带默认值 | map: Map对象, key: 键, defaultValue: 默认值 | int |
| getLong(Map<?, ?> map, String key) | 获取长整型值 | map: Map对象, key: 键 | long |
| getLong(Map<?, ?> map, String key, long defaultValue) | 获取长整型值,带默认值 | map: Map对象, key: 键, defaultValue: 默认值 | long |
| getDouble(Map<?, ?> map, String key) | 获取双精度浮点型值 | map: Map对象, key: 键 | double |
| getDouble(Map<?, ?> map, String key, double defaultValue) | 获取双精度浮点型值,带默认值 | map: Map对象, key: 键, defaultValue: 默认值 | double |
| getBoolean(Map<?, ?> map, String key) | 获取布尔值 | map: Map对象, key: 键 | boolean |
| getBoolean(Map<?, ?> map, String key, boolean defaultValue) | 获取布尔值,带默认值 | map: Map对象, key: 键, defaultValue: 默认值 | boolean |
| getList(Map<?, ?> map, String key, Class | 获取List类型值 | map: Map对象, key: 键, elementType: 元素类型 | List |
| getSet(Map<?, ?> map, String key, Class | 获取Set类型值 | map: Map对象, key: 键, elementType: 元素类型 | Set |
| getMap(Map<?, ?> map, String key, Class | 获取Map类型值 | map: Map对象, key: 键, keyType: 键类型, valueType: 值类型 | Map<K, V> |
| getDate(Map<?, ?> map, String key) | 获取日期类型值 | map: Map对象, key: 键 | Date |
| getDate(Map<?, ?> map, String key, Date defaultValue) | 获取日期类型值,带默认值 | map: Map对象, key: 键, defaultValue: 默认值 | Date |