javadictionarypretty-print

Pretty-print a Map in Java


I am looking for a nice way to pretty-print a Map.

map.toString() gives me: {key1=value1, key2=value2, key3=value3}

I want more freedom in my map entry values and am looking for something more like this: key1="value1", key2="value2", key3="value3"

I wrote this little piece of code:

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();

But I am sure there is a more elegant and concise way to do this.


Solution

  • Or put your logic into a tidy little class.

    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();
    
        }
    }
    

    Usage:

    Map<String, String> myMap = new HashMap<String, String>();
    
    System.out.println(new PrettyPrintingMap<String, String>(myMap));
    

    Note: You can also put that logic into a utility method.