I want to be able to (pretty-)print the contents of my maps.
They should have newlines and indentation rather than on a single line; ignoring the toString methods of collections/iterables/etc; and recursing into nested collections.
This is especially of interest for me regarding maps. I suppose JSON'ing might be relevant, but I don't want to go that far, or at least - I don't want my code to have to know about JSON just for me to pretty-print it. What are my options (other than writing this myself)?
You can use the method MapUtils.debugPrint from the apache commons collections in order to print nested maps.
This method prints a nicely formatted String describing the Map. Each map entry will be printed with key, value and value classname. When the value is a Map, recursive behaviour occurs.
Try replacing the start of each entry with new line and tab like this
myMap.toString().replace("[", "\n\t[");
I am not 100% sure, might be is this what you are looking for and which you called pretty printing -
Map<Integer,String> map = new HashMap<Integer,String>();
...
for(Map.Entry<Integer,String> entry: map.entrySet()){
System.out.println(entry.getKey()+" - "+ entry.getValue());
}
I was looking for a printing of nested collections in Java which brought me here. However the answers only work for Maps therefore I thought I'd add my solution for nested Collections. It produces a JSON like output, if you want newlines add "]\n" rather than ']'.
Note that this will not produce pretty output if the Object[] contains nested elements. You would need to write a separate method to deal with nested arrays. Also it will not pretty print primitive arrays, for that you'd need an else statement for every primitive array type.
private static <A extends Collection<B>, B> String nestedToString(A collection) {
if (collection == null)
return "null";
String ret = "";
Iterator<B> colIterator = collection.iterator();
if (colIterator.hasNext()) {
ret += '[';
while (colIterator.hasNext()) {
B object = colIterator.next();
if (object == null) {
ret += "null";
} else if (object instanceof Collection) {
ret += nestedToString((Collection) object);
} else if (object instanceof Object[]) {
ret += Arrays.deepToString((Object[]) object);
} else {
ret += object;
}
if (colIterator.hasNext()) {
ret += ", ";
}
}
ret += ']';
}
return ret;
}
来源:https://stackoverflow.com/questions/15171699/multi-line-pretty-printing-of-nested-collections-in-java