我希望能夠(漂亮)打印我的地圖的內容。Java中(嵌套)集合的多行漂亮打印
他們應該有新行和縮進,而不是一個單一的線;忽略collection/iterables/etc的toString方法;並遞歸到嵌套集合中。
這是特別是關於地圖,我的興趣。我想JSON可能是相關的,但我不想走那麼遠,或者至少 - 我不希望我的代碼必須知道JSON才能讓它漂亮地打印出來。我的選擇是什麼(除了自己寫這個)?
我希望能夠(漂亮)打印我的地圖的內容。Java中(嵌套)集合的多行漂亮打印
他們應該有新行和縮進,而不是一個單一的線;忽略collection/iterables/etc的toString方法;並遞歸到嵌套集合中。
這是特別是關於地圖,我的興趣。我想JSON可能是相關的,但我不想走那麼遠,或者至少 - 我不希望我的代碼必須知道JSON才能讓它漂亮地打印出來。我的選擇是什麼(除了自己寫這個)?
您可以使用該方法MapUtils.debugPrint從Apache Commons Collections中,以打印嵌套地圖。
此方法打印描述地圖一個很好的格式的字符串。每個地圖條目將被打印出鍵值,值和值類名。當該值爲Map時,會發生遞歸行爲。
我不是100%肯定,可能這是你在找什麼,哪些是你叫漂亮的印刷 -
Map<Integer,String> map = new HashMap<Integer,String>();
...
for(Map.Entry<Integer,String> entry: map.entrySet()){
System.out.println(entry.getKey()+" - "+ entry.getValue());
}
這不會縮進,也不會幫助我嵌套的地圖(或其他集合)。 – einpoklum 2013-03-02 07:33:26
它只是一個迭代在一張地圖上。如果你有嵌套集合,你可以在它內部使用嵌套循環。 – 2013-03-02 07:35:13
嘗試更換新的線和標籤這樣每個條目的開始
myMap.toString().replace("[", "\n\t[");
這種方法缺乏適當的空間識別。 – 2014-10-02 03:20:37
我一直在尋找的Java嵌套集合這把我帶到這裏的印刷。然而,答案只適用於地圖,因此我想我會添加我的解決方案嵌套集合。它產生一個類似JSON的輸出,如果你想換行添加「] \ n」而不是']'。
注意,如果對象[]包含嵌套的元素,這將不會產生漂亮的輸出。你需要編寫一個單獨的方法來處理嵌套數組。它也不會打印原始數組,因爲你需要每個原始數組類型的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;
}
鏈接不工作,試試這個 - http://commons.apache.org/proper/commons-collections/javadocs/api-2.1.1/org/apache/commons/collections/MapUtils.html – gauravphoenix 2013-10-09 20:10:27
@gauravphoenix我已經更新鏈接。請注意,您已鏈接到2.1.1版本,同時還有3.2.1版本。 (4.0仍然是阿爾法) – lbalazscs 2013-10-10 15:43:45