Java中的Map转换为字符串

106

在Java中,当我使用System.out.println(map)时,我可以在标准输出中获得一个好的输出。如何在不影响标准输出的情况下获得一个相同的Map字符串表示,并将其存储在变量中?类似于String mapAsString = Collections.toString(map)

2个回答

167
使用 Object#toString()
String string = map.toString();

毕竟这也是System.out.println(object)底层执行的操作。地图的格式在AbstractMap#toString()中描述。

返回此映射的字符串表示形式。字符串表示形式由按照地图的entrySet视图迭代器返回的顺序排列的键值映射列表组成,括在大括号("{}")中。相邻的映射由字符", "(逗号和空格)分隔。每个键值映射呈现为键后跟一个等号("="),后跟相关联的值。键和值被转换为字符串,就像String.valueOf(Object)一样。


3
按下地图的toString()方法上的F3会给人误导!它会直接跳转到Object.toString()方法 - 在使用F3之前应该仔细考虑。 - Adam
3
@Adam,这是因为你在接口上调用了toString()方法,而这个方法在接口中当然没有定义。你的IDE不知道实际运行时的实现情况,所以你不应该责怪她。 - Victor Dombrovsky
@VictorDombrovsky 任何半好的IDE(例如IntelliJ,Eclipse等)都应该能够追踪接口中定义的方法的实际实现。 - wheeler
1
但是关键值没有双引号,因此如果有人尝试将其用作JSON,则不是有效的JSON。 - Satish Patro
需要强调的是 String.valueOf(map) 是处理空映射的更好选择。 - kisna
显示剩余4条评论

12
你也可以使用Google Collections (Guava)的Joiner类,如果你想自定义打印格式。
Joiner.on(",").withKeyValueSeparator("=").join(map);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接