18

Java HashMap (またはその他) の内容を、たとえば STDOUT にダンプするにはどうすればよいですか?

例として、次の構造の複雑な HashMap があるとします。

( student1 => Map( name => Tim,         
                   Scores => Map( math => 10,
                                  physics => 20,
                                  Computers => 30),
                   place => Miami,
                   ranking => Array(2,8,1,13),
                  ),
 student2 => Map ( 
                   ...............
                   ...............
                 ),
............................
............................
);

データ構造についてのアイデアを得るために、画面に出力したいと思います。PHP の var_dump() または Perl の dumper() に似たものを探しています。

4

3 に答える 3

30

使用HashMap.toString()ドキュメントはこちら):

System.out.println("HASH MAP DUMP: " + myHashMap.toString());

通常、Object.toString()このようなデータをダンプするために使用します。

于 2012-06-13T03:34:44.327 に答える
3

データ構造 (ネストされたマップ、配列、およびセットなど) をダンプする良い方法は、フォーマットされた JSON にシリアル化することです。たとえば、Gson (com.google.gson) を使用する場合:

Gson gson = new GsonBuilder().setPrettyPrinting().create();
System.out.println(gson.toJson(dataStructure));

これにより、最も複雑なデータ構造がかなり読みやすい方法で出力されます。

于 2016-09-16T23:15:47.410 に答える
0

私はよくこのような関数を使用します ( Map 内の他のタイプのオブジェクトのプリティプリントに対応するために拡張する必要があるかもしれません)。

@SuppressWarnings("unchecked")
private static String hashPP(final Map<String,Object> m, String... offset) {
    String retval = "";
    String delta = offset.length == 0 ? "" : offset[0];
    for( Map.Entry<String, Object> e : m.entrySet() ) {
        retval += delta + "["+e.getKey() + "] -> ";
        Object value = e.getValue();
        if( value instanceof Map ) {
            retval += "(Hash)\n" + hashPP((Map<String,Object>)value, delta + "  ");
        } else if( value instanceof List ) {
            retval += "{";
            for( Object element : (List)value ) {
                retval += element+", ";
            }
            retval += "}\n";
        } else {
            retval += "["+value.toString()+"]\n";
        }
    }
    return retval+"\n";
} // end of hashPP(...)

したがって、次のコード

public static void main(String[] cmd) {
    Map<String,Object> document = new HashMap<String, Object>();

    Map<String,Object> student1 = new LinkedHashMap<String, Object>();
    document.put("student1", student1);
    student1.put("name", "Bob the Student");
    student1.put("place", "Basement");
    List<Integer> ranking = new LinkedList<Integer>();
    student1.put("ranking", ranking);
    ranking.add(2);
    ranking.add(8);
    ranking.add(1);
    ranking.add(13);
    Map<String,Object> scores1 = new HashMap<String, Object>();
    student1.put("Scores", scores1);
    scores1.put("math", "0");
    scores1.put("business", "100");

    Map<String,Object> student2= new LinkedHashMap<String, Object>();
    document.put("student2", student2);
    student2.put("name", "Ivan the Terrible");
    student2.put("place", "Dungeon");

    System.out.println(hashPP(document));
}

出力が生成されます

[student2] -> (Hash)
  [name] -> [Ivan the Terrible]
  [place] -> [Dungeon]

[student1] -> (Hash)
  [name] -> [Bob the Student]
  [place] -> [Basement]
  [ranking] -> {2, 8, 1, 13, }
  [Scores] -> (Hash)
    [math] -> [0]
    [business] -> [100]

また。特定のニーズに合わせてこれを変更する必要がある場合があります。

于 2012-06-13T03:50:16.837 に答える