CamelCaseMap
# 功能介绍
CamelCaseMap是Hutool中提供的驼峰命名Map实现,它会自动将所有键转换为驼峰命名格式。这意味着当添加键值对时,无论使用什么命名格式(如下划线命名、连字符命名等),都会被自动转换为驼峰命名,方便在Java代码中使用。
# 主要特性
- 自动将所有键转换为驼峰命名格式
- 支持下划线命名、连字符命名等多种格式转换
- 基于HashMap实现,性能优异
- 支持所有Map接口方法
- 支持null键和null值
- 线程不安全,建议在单线程环境下使用
# 适用场景
- 需要处理不同命名格式的键,统一转换为驼峰命名
- 从数据库查询结果转换为Java对象时使用
- 处理外部API返回的不同命名格式的JSON数据
- 需要统一Map键命名风格的场景
- 开发中需要遵循Java命名规范的场景
# 使用示例
# 示例1:基本用法
// 创建CamelCaseMap
CamelCaseMap<String, Object> map = new CamelCaseMap<>();
// 添加不同命名格式的键值对
map.put("user_name", "hutool");
map.put("user-age", 18);
map.put("userEmail", "hutool@example.com");
// 获取值,使用驼峰命名键
String userName = (String) map.get("userName");
// 输出: hutool
Integer userAge = (Integer) map.get("userAge");
// 输出: 18
String userEmail = (String) map.get("userEmail");
// 输出: hutool@example.com
// 遍历Map,所有键都是驼峰命名
map.forEach((key, value) -> {
Console.log(key + "=" + value);
});
// 输出:
// userName=hutool
// userAge=18
// userEmail=hutool@example.com
# 示例2:判断键是否存在
CamelCaseMap<String, Object> map = new CamelCaseMap<>();
map.put("user_name", "hutool");
// 判断键是否存在,使用不同命名格式
boolean contains1 = map.containsKey("userName");
// 输出: true
boolean contains2 = map.containsKey("user_name");
// 输出: true
boolean contains3 = map.containsKey("USER-NAME");
// 输出: true
boolean contains4 = map.containsKey("userPhone");
// 输出: false
# 示例3:与MapUtil结合使用
// 使用MapUtil创建CamelCaseMap
Map<String, Object> map = MapUtil.newCamelCaseMap();
map.put("user_name", "hutool");
map.put("user_age", 18);
// 获取值,使用驼峰命名键
String userName = (String) map.get("userName");
// 输出: hutool
Integer userAge = (Integer) map.get("userAge");
// 输出: 18
# 示例4:转换已有Map
// 创建普通Map
Map<String, Object> normalMap = MapUtil.of(
"user_name", "hutool",
"user_age", 18,
"user_email", "hutool@example.com"
);
// 转换为CamelCaseMap
Map<String, Object> camelCaseMap = MapUtil.toCamelCaseMap(normalMap);
// 获取值,使用驼峰命名键
String userName = (String) camelCaseMap.get("userName");
// 输出: hutool
# 注意事项
- CamelCaseMap是线程不安全的,在多线程环境下使用需要额外同步
- 所有键都会被转换为驼峰命名,原始命名格式会丢失
- 转换规则:下划线、连字符等分隔符后的第一个字符大写,其他字符小写
- 性能与HashMap相当,适合大多数场景
- 支持null键,但null键不进行驼峰转换
- 不支持重复键,转换后相同的键会被覆盖
# 方法列表
CamelCaseMap继承自HashMap,因此支持所有Map接口方法,主要包括:
| 方法名 | 描述 | 参数 | 返回值 |
|---|---|---|---|
| put(K key, V value) | 添加键值对,键自动转换为驼峰命名 | key: 键, value: 值 | V |
| get(Object key) | 获取值,键自动转换为驼峰命名 | key: 键 | V |
| containsKey(Object key) | 判断键是否存在,键自动转换为驼峰命名 | key: 键 | boolean |
| remove(Object key) | 移除键值对,键自动转换为驼峰命名 | key: 键 | V |
| size() | 获取Map大小 | 无 | int |
| isEmpty() | 判断Map是否为空 | 无 | boolean |
| clear() | 清空Map | 无 | void |
| keySet() | 获取键集合,所有键都是驼峰命名 | 无 | Set |
| values() | 获取值集合 | 无 | Collection |
| entrySet() | 获取键值对集合,所有键都是驼峰命名 | 无 | Set<Map.Entry<K, V>> |