核心方法概览
| 方法 | 示例输出 | 适用场景 | 依赖库 | 备注 |
|---|---|---|---|---|
| 手动拼接 | {name=John, age=30} |
简单、快速、无需额外依赖 | 无 | 最基础的方法,灵活但代码稍显冗长。 |
Map.toString() |
{name=John, age=30} |
快速调试、日志输出 | 无 | 最简单直接,但格式不可控。 |
| Jackson / Gson | {"name":"John","age":30} |
JSON 序列化,Web API,数据交换 | Jackson, Gson | 强烈推荐用于数据交互,格式标准,功能强大。 |
| Apache Commons Lang | name=John, age=30 |
需要特定格式(如URL参数) | commons-lang3 |
方便,但不如Jackson/Gson通用。 |
| Java 8 Streams | name=John, age=30 |
现代、函数式编程风格,无需库 | Java 8+ | 代码简洁,一行搞定,适合喜欢Stream API的开发者。 |
手动拼接字符串
这是最基础的方法,通过遍历 Map 的 entrySet 来拼接字符串。

特点:
- 优点:无需任何外部依赖,逻辑清晰。
- 缺点:代码量稍多,需要处理逗号分隔和
null值。
代码示例:
import java.util.HashMap;
import java.util.Map;
public class MapToStringExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("Alice", 25);
map.put("Bob", 30);
map.put("Charlie", null); // 测试 null 值
StringBuilder sb = new StringBuilder();
sb.append("{");
for (Map.Entry<String, Integer> entry : map.entrySet()) {
if (sb.length() > 1) { // 第一个元素前不加逗号
sb.append(", ");
}
// 处理 null 值,避免 NullPointerException
String value = entry.getValue() == null ? "null" : entry.getValue().toString();
sb.append(entry.getKey()).append("=").append(value);
}
sb.append("}");
System.out.println(sb.toString());
// 输出: {Alice=25, Bob=30, Charlie=null}
}
}
使用 Map.toString()
Map 接口直接继承自 Object,并重写了 toString() 方法,这是最简单直接的方式。
特点:

- 优点:一行代码搞定,非常方便。
- 缺点:格式完全由
Map内部实现决定,无法自定义(无法替换 或 )。
代码示例:
import java.util.HashMap;
import java.util.Map;
public class MapToStringExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("name", "John");
map.put("age", 30);
String mapString = map.toString();
System.out.println(mapString);
// 输出: {name=John, age=30}
}
}
使用 JSON 库(推荐用于数据交换)
在现代应用中,尤其是在与前端或进行数据存储时,将 Map 转换为 JSON 格式的字符串是最常见和最推荐的做法,Jackson 和 Gson 是两个最流行的库。
使用 Jackson
你需要添加 Jackson 的依赖到你的项目中。
Maven (pom.xml):

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version> <!-- 使用最新版本 -->
</dependency>
代码示例:
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;
import java.util.Map;
public class MapToJsonWithJackson {
public static void main(String[] args) {
Map<String, Object> map = new HashMap<>();
map.put("name", "John Doe");
map.put("age", 30);
map.put("isStudent", false);
map.put("scores", new int[]{95, 88, 76});
ObjectMapper objectMapper = new ObjectMapper();
try {
// 将 Map 转换为格式化的 JSON 字符串
String jsonString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(map);
System.out.println(jsonString);
// 转换为紧凑的 JSON 字符串
String compactJsonString = objectMapper.writeValueAsString(map);
System.out.println(compactJsonString);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
输出:
{
"name" : "John Doe",
"age" : 30,
"isStudent" : false,
"scores" : [ 95, 88, 76 ]
}
{"name":"John Doe","age":30,"isStudent":false,"scores":[95,88,76]}
使用 Gson
添加 Gson 的依赖。
Maven (pom.xml):
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version> <!-- 使用最新版本 -->
</dependency>
代码示例:
import com.google.gson.Gson;
import java.util.HashMap;
import java.util.Map;
public class MapToJsonWithGson {
public static void main(String[] args) {
Map<String, Object> map = new HashMap<>();
map.put("name", "Jane Doe");
map.put("age", 28);
map.put("isEmployed", true);
Gson gson = new Gson();
String jsonString = gson.toJson(map);
System.out.println(jsonString);
// 输出: {"name":"Jane Doe","age":28,"isEmployed":true}
}
}
使用 Apache Commons Lang
如果你已经在使用 Apache Commons Lang 库,它提供了一些非常方便的工具类。
Maven (pom.xml):
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version> <!-- 使用最新版本 -->
</dependency>
代码示例:
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.util.HashMap;
import java.util.Map;
public class MapToStringWithCommonsLang {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("id", 101);
map.put("version", 2);
// 使用 ToStringBuilder,可以指定样式
String str1 = ToStringBuilder.reflectionToString(map, ToStringStyle.NO_CLASS_STYLE);
System.out.println(str1);
// 输出: {id=101, version=2}
// 使用 StringUtils.join
// 需要先转换为数组或集合
String str2 = StringUtils.join(map.entrySet(), ",");
System.out.println(str2);
// 输出: id=101,version=2
}
}
使用 Java 8 Streams
如果你使用的是 Java 8 或更高版本,可以利用 Stream API 来实现,代码非常简洁。
特点:
- 优点:代码简洁、函数式风格,无需额外库。
- 缺点:对于复杂格式(如JSON)处理起来不如Jackson/Gson方便。
代码示例:
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
public class MapToStringWithStream {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("productA", 10);
map.put("productB", 25);
String mapString = map.entrySet()
.stream()
.map(entry -> entry.getKey() + "=" + entry.getValue()) // 转换为 "key=value" 形式的字符串流
.collect(Collectors.joining(", ", "{", "}")); // 用 ", " 连接,并加上前后缀
System.out.println(mapString);
// 输出: {productA=10, productB=25}
}
}
总结与如何选择
| 场景 | 推荐方法 |
|---|---|
| 快速调试、打印日志 | Map.toString() 或 Java 8 Streams |
需要自定义简单格式(如 key1:value1, key2:value2) |
Java 8 Streams (最优雅) 或 手动拼接 |
| 将数据传递给前端、存储到数据库或进行网络传输 | Jackson 或 Gson (标准做法) |
| 项目已大量使用 Apache Commons Lang | Apache Commons Lang |
| 需要兼容旧版 Java (Java 7 或更低) | 手动拼接 或 Apache Commons Lang |
对于绝大多数现代 Java 开发,特别是涉及数据交互的场景,强烈推荐使用 Jackson 或 Gson,它们不仅能处理 Map,还能处理复杂的 Java 对象,并且提供了丰富的配置选项,如果只是想在控制台打印一下,Map.toString() 或 Java 8 Streams 是最快的选择。
