Java lacks functionality to pretty print data structures. Let’s remedy that situation.
To make that work we will use code from some other posts : [Is scalar], [join], [List to Map].
It is simple recursive function : dump()
Below you can see an example usage.
You can also experiment with the code here.
import java.util.*; import java.util.Map.Entry; class Dump { //the biggest invention in Java-world since sliced-bread ;) public static <ARG> void say(ARG arg) { System.out.println(arg); } //joins Iterable or Collection into a String public static <T> String join(String delimiter, Iterable<T> lst) { StringBuilder str = new StringBuilder(); Iterator<T> it = lst.iterator(); while ( it.hasNext() ) { str.append(it.next().toString()); if (it.hasNext()) str.append(delimiter); } return str.toString(); } //for Classes check if the value is SCALAR public static boolean is_scalar(Object var) { if( (var instanceof Number) || (var instanceof String) || (var instanceof Boolean)) return true; return false; } public static HashMap<Integer, ?> list2map(List lst) { HashMap map = new HashMap(); for (int i=0; i < lst.size(); i++) { map.put(i, lst.get(i)); } return map; } public static String dump(List lst, String... offset) { return dump(list2map(lst), offset); } // Pretty print a LoL structure, for debugging purposes public static String dump(Map m, String... offset) { if (m == null) return ""; StringBuilder rv = new StringBuilder(); String delta = offset.length == 0 ? "" : offset[0]; for( Entry e : (Set<Map.Entry>) m.entrySet() ) { rv.append( delta + e.getKey() + " : " ); Object value = e.getValue(); if( value instanceof Map ) rv.append( ">\n" + dump((Map) value, delta + " ") ); if( value instanceof Collection ) rv.append( "[" + join(",", (Collection) value) + "]\n" ); if( is_scalar(value) ) rv.append( value +"\n" ); } return rv.toString(); } public static void main(String[] args) { List lst = Arrays.asList(1,2,3,4); HashMap lvl2 = new HashMap() {{ put("key2-1", "value2-1"); put("key2-2", "value2-2"); }}; HashMap map = new HashMap() {{ put("key", "value"); put("lvl2", lvl2); put("lst",lst); }}; say(dump(map)); } }
here is the output :
lvl2 : > key2-2 : value2-2 key2-1 : value2-1 lst : [1,2,3,4] key : value