MapJoiner
# 功能介绍
MapJoiner是Hutool中用于将Map转换为字符串的工具类,提供了灵活的配置选项来控制字符串的格式。它支持自定义键值对分隔符、键值分隔符,以及对空值的处理方式。
# 主要特性
- 支持自定义键值对分隔符(如&、,等)
- 支持自定义键值分隔符(如=、:等)
- 支持处理空值(忽略或替换)
- 支持对键值进行转义
- 支持排序输出
- 支持链式调用
# 适用场景
- 需要将Map转换为URL查询字符串
- 需要将Map转换为配置文件格式
- 需要将Map转换为自定义格式的字符串
- 需要灵活控制Map转换为字符串的格式
# 使用示例
# 示例1:基本用法
// 创建Map
Map<String, Object> map = MapUtil.of(
"name", "hutool",
"version", "7.0.0",
"author", "looly"
);
// 使用默认分隔符(键值对用&,键值用=)
String result1 = MapJoiner.of().join(map);
// 输出: name=hutool&version=7.0.0&author=looly
// 自定义分隔符
String result2 = MapJoiner.of(", ", "=")
.join(map);
// 输出: name=hutool, version=7.0.0, author=looly
# 示例2:处理空值
// 创建包含空值的Map
Map<String, Object> map = MapUtil.of(
"name", "hutool",
"version", null,
"author", "looly"
);
// 默认忽略空值
String result1 = MapJoiner.of().join(map);
// 输出: name=hutool&author=looly
// 保留空值(使用空字符串)
String result2 = MapJoiner.of()
.useForNull("")
.join(map);
// 输出: name=hutool&version=&author=looly
// 使用特定字符串替换空值
String result3 = MapJoiner.of()
.useForNull("unknown")
.join(map);
// 输出: name=hutool&version=unknown&author=looly
# 示例3:排序输出
// 创建无序的Map
Map<String, Object> map = MapUtil.of(
"b", 2,
"a", 1,
"c", 3
);
// 排序输出
String result = MapJoiner.of()
.withSortedKeys()
.join(map);
// 输出: a=1&b=2&c=3(按键排序)
# 示例4:URL查询字符串
// 创建查询参数Map
Map<String, Object> params = MapUtil.of(
"name", "hutool",
"version", "7.0.0",
"keywords", "java,tool,util"
);
// 生成URL查询字符串
String queryString = MapJoiner.of("&", "=")
.join(params);
// 输出: name=hutool&version=7.0.0&keywords=java,tool,util
// 结合URL使用
String url = "https://hutool.cn/api?" + queryString;
// 输出: https://hutool.cn/api?name=hutool&version=7.0.0&keywords=java,tool,util
# 注意事项
- MapJoiner是线程安全的,可以在多线程环境下使用
- 默认情况下,MapJoiner会忽略null值
- 当使用withSortedKeys()时,输出的字符串会按键的自然顺序排序
- 对于特殊字符,建议使用URLEncoder进行转义后再使用MapJoiner
# 方法列表
| 方法名 | 描述 | 参数 | 返回值 |
|---|---|---|---|
| of() | 创建默认的MapJoiner(键值对分隔符&,键值分隔符=) | 无 | MapJoiner |
| of(String entrySeparator, String keyValueSeparator) | 创建自定义分隔符的MapJoiner | entrySeparator: 键值对分隔符, keyValueSeparator: 键值分隔符 | MapJoiner |
| useForNull(String nullText) | 设置空值替换文本 | nullText: 空值替换文本 | MapJoiner |
| withSortedKeys() | 设置按键排序输出 | 无 | MapJoiner |
| join(Map<?, ?> map) | 将Map转换为字符串 | map: 要转换的Map | String |
| join(Map<?, ?> map, String defaultValue) | 将Map转换为字符串,空Map使用默认值 | map: 要转换的Map, defaultValue: 空Map默认值 | String |