2013-03-02 4 views
7

私のマップの内容を(きれいに)印刷したいと思っています。Javaで(入れ子にされた)コレクションの複数行のきれいな印刷

1行ではなく、改行とインデントが必要です。コレクション/ iterables/etcのtoStringメソッドを無視する。ネストされたコレクションに再帰します。

これは特にマップに関する私にとって興味深いものです。私はJSONの方が適切かもしれないと思うが、それほど遠くに行きたいとは思っていない。少なくともJSONについて知る必要はない。私の選択肢は何ですか?このような新しい行とタブと、各エントリの開始を交換してみてください

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

答えて

15

あなたは、ネストされたマップを印刷するために、ApacheのコモンズのコレクションからメソッドMapUtils.debugPrintを使用することができます。

このメソッドは、マップを記述するきれいにフォーマットされたStringを出力します。各マップエントリはkey、value、value classnameで表示されます。値がMapの場合、再帰的な動作が発生します。

+1

リンクが動作しない、試してみてください - http://commons.apache.org/proper/commons-collections/javadocs/api-2.1.1/org/apache/commons/collections/MapUtils.html – gauravphoenix

+0

@gauravphoenix私は更新しましたリンク。 2.1.1バージョンにもリンクしていますが、3.2.1バージョンもあります。 (4.0はまだアルファです) – lbalazscs

1

私はあるかもしれない、100%わからないが、あなたが探しているとあなたがを印刷かなりと呼ばれた何これです

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

+0

これは字下げを行わず、ネストマップ(または他のコレクション)で私を助けません。 – einpoklum

+0

これは単なるマップ上の繰り返しです。ネストされたコレクションがある場合は、ネストされたループを使用することができます。 –

3

-

+0

このアプローチでは、スペースによる正しい識別が欠けています。 –

1

私は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; 
} 
関連する問題