2013-03-02 35 views
7

我希望能夠(漂亮)打印我的地圖的內容。Java中(嵌套)集合的多行漂亮打印

他們應該有新行和縮進,而不是一個單一的線;忽略collection/iterables/etc的toString方法;並遞歸到嵌套集合中。

這是特別是關於地圖,我的興趣。我想JSON可能是相關的,但我不想走那麼遠,或者至少 - 我不希望我的代碼必須知道JSON才能讓它漂亮地打印出來。我的選擇是什麼(除了自己寫這個)?

回答

15

您可以使用該方法MapUtils.debugPrint從Apache Commons Collections中,以打印嵌套地圖。

此方法打印描述地圖一個很好的格式的字符串。每個地圖條目將被打印出鍵值,值和值類名。當該值爲Map時,會發生遞歸行爲。

+1

鏈接不工作,試試這個 - 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

+0

@gauravphoenix我已經更新鏈接。請注意,您已鏈接到2.1.1版本,同時還有3.2.1版本。 (4.0仍然是阿爾法) – lbalazscs 2013-10-10 15:43:45

1

我不是100%肯定,可能這是你在找什麼,哪些是你叫漂亮的印刷 -

Map<Integer,String> map = new HashMap<Integer,String>(); 
... 
for(Map.Entry<Integer,String> entry: map.entrySet()){ 
    System.out.println(entry.getKey()+" - "+ entry.getValue()); 
} 
+0

這不會縮進,也不會幫助我嵌套的地圖(或其他集合)。 – einpoklum 2013-03-02 07:33:26

+0

它只是一個迭代在一張地圖上。如果你有嵌套集合,你可以在它內部使用嵌套循環。 – 2013-03-02 07:35:13

3

嘗試更換新的線和標籤這樣每個條目的開始

myMap.toString().replace("[", "\n\t[");

+0

這種方法缺乏適當的空間識別。 – 2014-10-02 03:20:37

1

我一直在尋找的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; 
}