问题
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)?
回答1:
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.
回答2:
Try replacing the start of each entry with new line and tab like this
myMap.toString().replace("[", "\n\t[");
回答3:
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());
}
回答4:
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