访问Hashmap中的Hashmap,并以格式打印出来

时间:2016-02-10 06:57:12

标签: java data-structures hashmap

    static HashMap<String, HashMap<String, List<Integer>>> BIGMAP= new HashMap<String, HashMap<String, List<Integer>>>();

这是一个Hashmap,如果我打印出来,这就是我得到的:

SortedSet<String> keys = new TreeSet<String>(BIGMAP.keySet());
     for (String key : keys) {
     HashMap<String, List<Integer>> value = kmap.get(key);
     System.out.println(key + " : " + value);

     }

a.txt : {a=[20], to=[10]}
b.txt : {a=[4, 20], by=[16], is=[2], to=[13, 22]}
c.txt : {a=[15], as=[16, 17], in=[34], do=[9], to=[14]}

所以我试图重复这个&#34; BIGMAP&#34;上面为每个键a.txt(String)有一个Value,它是另一个映射结构HashMap<String, List<Integer>>

...

输出:

a [15],[20],[4, 20],
as [16, 17],, ,, ,
by , ,, ,[16],
...so on...
...so on...
...so on...

预期/通缉输出

a  20, 4:20 ,15
as   ,  , 16:17
by   , 16 ,

打印格式应该如上所述,但显然它应该从每个文本文件(字符串)按顺序打印,这是外部hashmap中的一个键

例如a 20, 4:20 ,15 &#34;&#34;对于该单词而言,20来自密钥为a.txt4:20来自b.txt15来自c.txt <的值/ p>

正如你所看到的,我有一些东西,但它没有做到我需要的东西。冒号对于有多个数字的地方是必要的。它有时可能是4:20:50:92

1 个答案:

答案 0 :(得分:1)

这将完成Java 8中的工作。不是我最好的工作,但使用您的样本值成功测试。

BIGMAP.values()
        .stream()
        .flatMap(m -> m.keySet().stream())
        .distinct()
        .sorted()
        .map(k -> k
                + " "
                + BIGMAP.entrySet()
                        .stream()
                        .sorted(comparing(Entry::getKey))
                        .map(e -> e.getValue()
                                   .getOrDefault(k, Collections.emptyList())
                                   .stream()
                                   .map(String::valueOf)
                                   .collect(joining(":")))
                        .collect(joining(", ")))
        .forEachOrdered(System.out::println);

产生以下输出:

a 20, 4:20, 15
as , , 16:17
by , 16, 
do , , 9
in , , 34
is , 2, 
to 10, 13:22, 14