我希望能够(漂亮地)打印我的地图的内容。
它们应该有换行符和缩进,而不是单行;忽略 collections/iterables/etc 的 toString 方法;并递归到嵌套集合中。
我对地图特别感兴趣。我想 JSON'ing 可能是相关的,但我不想走那么远,或者至少 - 我不希望我的代码为了漂亮地打印它而必须了解 JSON。我有什么选择(除了自己写这个)?
我希望能够(漂亮地)打印我的地图的内容。
它们应该有换行符和缩进,而不是单行;忽略 collections/iterables/etc 的 toString 方法;并递归到嵌套集合中。
我对地图特别感兴趣。我想 JSON'ing 可能是相关的,但我不想走那么远,或者至少 - 我不希望我的代码为了漂亮地打印它而必须了解 JSON。我有什么选择(除了自己写这个)?
您可以使用 apache commons 集合中的MapUtils.debugPrint方法来打印嵌套地图。
此方法打印一个格式良好的描述地图的字符串。每个映射条目都将打印键、值和值类名。当值为 Map 时,会发生递归行为。
尝试用新行和标签替换每个条目的开头,如下所示
myMap.toString().replace("[", "\n\t[");
我不是 100% 肯定,可能这就是你要找的东西,你称之为漂亮的印刷-
Map<Integer,String> map = new HashMap<Integer,String>();
...
for(Map.Entry<Integer,String> entry: map.entrySet()){
System.out.println(entry.getKey()+" - "+ entry.getValue());
}
我正在寻找用 Java 打印的嵌套集合,它把我带到了这里。然而,答案只适用于地图,因此我想我会为嵌套集合添加我的解决方案。如果您想要换行符添加“]\n”而不是“]”,它会产生类似 JSON 的输出。
请注意,如果 Object[] 包含嵌套元素,这将不会产生漂亮的输出。您需要编写一个单独的方法来处理嵌套数组。此外,它不会很好地打印原始数组,因为您需要为每个原始数组类型添加一个 else 语句。
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;
}