打印出包含另一个哈希映射的哈希映射

时间:2013-11-11 19:44:35

标签: java string hash hashmap

我正在开发一个程序,该程序接收X个文件,然后使用多线程计算每个文件中出现的单词,并将结果保存在哈希映射中。

Map<String, Map<String, Integer>>

我有一个类似上面的哈希映射,格式为&lt; file_Name&lt;单词,出现&gt; 我想将整个地图导出到文本文件并保存。

是否有一个简单的解决方案来打印整个地图(订单/排序无关紧要)?

3 个答案:

答案 0 :(得分:2)

如果你想自己做,你可以:

Map<String, Map<String, Integer>> dictionaries = null;

PrintWriter pw = null;

for(Map.Entry<String, Map<String, Integer>> dictionaryEntry : dictionaries.entrySet()) {

    for(Map.Entry<String, Integer>  wordCounts :  dictionaryEntry.getValue().entrySet()) {

        pw.print(dictionaryEntry.getKey() + ", " + wordCounts.getKey() + ", " + wordCounts.getValue());

    }

}

HashMap是Serializable,所以你可以使用

ObjectOutputStreamhttp://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html

答案 1 :(得分:1)

当然,有多种方法可以做到这一点。我最喜欢的是使用google-gson。它是一个在JSON和Java对象之间进行转换的Java库。因此,您将能够毫无困难地检索嵌套的哈希映射结构,并且没有(好的...... 1-2行)额外编码。

这是detailed gson example

答案 2 :(得分:1)

此处map包含 filename --> another map

m包含 word-------> count

   Map<String, Map<String, Integer>> map = new HashMap<String, Map<String, Integer>>();
    Map<String, Integer> m = new HashMap<String, Integer>();
    m.put("abcd", 34);
    m.put("xyz", 34);
    map.put("a.txt", m);

    m=new HashMap<String, Integer>();
    m.put("abcd", 34);
    m.put("xyz", 34);
    map.put("b.txt", m);

    for(String s : map.keySet()){
        System.out.println("File name: "+s);
        Map<String, Integer> innerMap = map.get(s);
        for(String str:innerMap.keySet()){
            System.out.println(str+" : "+innerMap.get(str));
        }
        System.out.println("--------------------------------------------------------------------------------");
    }

<强>输出:

File name: b.txt
abcd : 34
xyz : 34
--------------------------------------------------------------------------------
File name: a.txt
abcd : 34
xyz : 34

或者另一种方式就是:

System.out.println(map);

<强>输出:

{b.txt={abcd=34, xyz=34}, a.txt={abcd=34, xyz=34}}