HashMap扩展 - Dict
# HashMap扩展 - Dict
简介
Dict 是 Hutool 提供的一个类似于 Python 中 dict 的数据结构,继承自 HashMap<String, Object>,它通过实现 BasicTypeGetter 接口,提供了丰富的 getXXX 方法,用于获取不同类型的数据。此外,Dict 支持链式操作、类型转换和 Bean 转换,极大提高了 Map 的灵活性和可用性。
# 1. 创建 Dict 对象
Dict 提供了多种方式来创建一个 Dict 对象,支持链式调用,使得创建和使用更加方便。
# 示例:创建 Dict 对象
import cn.hutool.core.lang.Dict;
import cn.hutool.core.date.DateTime;
public class DictExample {
public static void main(String[] args) {
// 创建一个空的 Dict 对象
Dict dict = Dict.create();
// 使用链式调用设置键值对
dict.set("key1", 1) // int 类型
.set("key2", 1000L) // long 类型
.set("key3", DateTime.now()); // Date 类型
// 打印 Dict 内容
System.out.println(dict);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Dict.create():创建一个新的空Dict对象。set(String key, Object value):设置键值对,支持链式调用。
作用: Dict 提供了一种更加灵活和简洁的方式来创建和操作 Map,特别适用于需要动态构建键值对集合的场景。
实际开发场景: 在处理配置数据、动态参数传递时,可以使用 Dict 来代替传统的 Map,提高代码的可读性和操作的便捷性。
# 2. 获取指定类型的值
Dict 提供了多种获取不同类型值的方法,例如 getInt、getLong、getStr 等,通过这些方法可以直接获取到目标类型的数据,避免了手动类型转换的麻烦。
# 示例:获取指定类型的值
import cn.hutool.core.lang.Dict;
public class DictExample {
public static void main(String[] args) {
// 创建并设置值
Dict dict = Dict.create()
.set("key1", 1)
.set("key2", 1000L)
.set("key3", "Hutool");
// 获取值并进行类型转换
int value1 = dict.getInt("key1"); // 获取 int 类型的值
long value2 = dict.getLong("key2"); // 获取 long 类型的值
String value3 = dict.getStr("key3"); // 获取 String 类型的值
// 打印结果
System.out.println("key1: " + value1);
System.out.println("key2: " + value2);
System.out.println("key3: " + value3);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
getInt(String key):获取int类型的值。getLong(String key):获取long类型的值。getStr(String key):获取String类型的值。
作用: 这些方法使得从 Dict 中获取值时更加简洁,并且避免了手动类型转换可能带来的错误。
实际开发场景: 在处理数据集合时,通常需要从 Map 中获取不同类型的数据,Dict 的这些方法可以简化代码逻辑,减少出错几率。
# 3. 转换为 Bean
Dict 支持将自身转换为指定类型的 Bean 对象,这对于需要将动态参数封装为实体类的场景非常有用。
# 示例:转换为 Bean
import cn.hutool.core.lang.Dict;
import cn.hutool.core.bean.BeanUtil;
public class DictExample {
public static void main(String[] args) {
// 创建 Dict 并设置值
Dict dict = Dict.create()
.set("name", "Hutool")
.set("age", 5);
// 将 Dict 转换为 Bean
Person person = BeanUtil.toBean(dict, Person.class);
// 打印结果
System.out.println(person);
}
}
// 定义一个 Person 类
class Person {
private String name;
private int age;
// 省略 getter 和 setter 方法
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
BeanUtil.toBean(Map<?, ?> map, Class<T> beanClass):将Dict转换为指定类型的 Bean 对象。
作用: 在需要将动态参数转换为实体对象时,Dict 提供了一种便捷的方式进行转换。
实际开发场景: 在 Web 应用中,处理请求参数并封装为实体对象时,Dict 可以作为中间桥梁进行转换。
# 4. 与 Map 的兼容性
Dict 继承自 HashMap,因此它完全兼容 Map 的所有操作,可以在需要 Map 的场景中无缝替代 HashMap。
# 示例:使用 Map 接口的操作
import cn.hutool.core.lang.Dict;
import java.util.Map;
public class DictExample {
public static void main(String[] args) {
// 创建 Dict
Dict dict = Dict.create()
.set("key1", "value1")
.set("key2", "value2");
// 将 Dict 作为 Map 使用
Map<String, Object> map = dict;
// 通过 Map 接口进行操作
map.put("key3", "value3");
// 打印结果
System.out.println(map);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
作用: Dict 作为 Map 的子类,可以与现有的 Map 代码兼容,减少代码重构的成本。
实际开发场景: 在需要将灵活的键值对集合传递给现有代码时,Dict 可以无缝接入。
# 5. 其他常用方法
Dict 还提供了许多实用的方法,例如:
remove(String key):移除指定键的值。putAll(Map<? extends String, ?> map):将另一个Map的所有键值对加入到当前Dict中。clear():清空所有键值对。
总结
Dict 是一个功能强大的 HashMap 扩展,它提供了更加灵活和易用的键值对操作方式。在需要处理动态参数、配置数据或进行类型安全的值获取时,Dict 是一个非常实用的工具类。通过它的链式操作、类型转换和 Bean 转换功能,可以极大提高代码的简洁性和可维护性。