问题
我正在寻找一种漂亮的方式来打印aMap
。
map.toString()
给我:{key1=value1, key2=value2, key3=value3}
我希望在我的 Map 条目值中有更多自由,我正在寻找更像这样的东西:key1="value1", key2="value2", key3="value3"
我写了这段小代码:
StringBuilder sb = new StringBuilder();
Iterator<Entry<String, String>> iter = map.entrySet().iterator();
while (iter.hasNext()) {
Entry<String, String> entry = iter.next();
sb.append(entry.getKey());
sb.append('=').append('"');
sb.append(entry.getValue());
sb.append('"');
if (iter.hasNext()) {
sb.append(',').append(' ');
}
}
return sb.toString();
但我确信有更优雅和简洁的方法来做到这一点。
#1 热门回答(240 赞)
Arrays.toString(map.entrySet().toArray())
#2 热门回答(61 赞)
看看Guava图书馆:
Joiner.MapJoiner mapJoiner = Joiner.on(",").withKeyValueSeparator("=");
System.out.println(mapJoiner.join(map));
#3 热门回答(52 赞)
或者把你的逻辑变成一个整洁的小班。
public class PrettyPrintingMap<K, V> {
private Map<K, V> map;
public PrettyPrintingMap(Map<K, V> map) {
this.map = map;
}
public String toString() {
StringBuilder sb = new StringBuilder();
Iterator<Entry<K, V>> iter = map.entrySet().iterator();
while (iter.hasNext()) {
Entry<K, V> entry = iter.next();
sb.append(entry.getKey());
sb.append('=').append('"');
sb.append(entry.getValue());
sb.append('"');
if (iter.hasNext()) {
sb.append(',').append(' ');
}
}
return sb.toString();
}
}
用法:
Map<String, String> myMap = new HashMap<String, String>();
System.out.println(new PrettyPrintingMap<String, String>(myMap));
注意:你也可以将该逻辑放入实用程序方法中。