遍历带有嵌套列表的地图作为值

时间:2016-02-08 05:42:14

标签: java

这是Map,其中String键(文本文件)和值(整数List):

aaa.txt : {(The=[11], put=[8], I'm=[1], by=[5], you,=[3, 7], the=[4, 10], key=[6, 9]}
bbb.txt : {do.=[12], to=[6], I'm=[1], what=[9], you=[4, 10], want=[11], sure=[2]}
ccc.txt : {just=[10], need=[7], you,=[6], it=[5], than=[3], It's=[1], the=[11]}

我想以这种格式打印出来:

you, 3:7, , 6

如您所见,我想打印上述格式"您,"位于aaa.txtccc.txt但不是bbb.txt,因此应该打印出单词you, 3:7, ,6

如果在bbb.txt中找不到you,那么我们应该you, 3:7, "space", 6。所以空格是显示第二个文本文件中没有单词。

就像我想要在MAP的值中打印每个单词并保持。这是上面

的地图结构
HashMap<String, HashMap<String, List<Integer>>> COOLMAP = new HashMap<String,HashMap<String, List<Integer>>>();



EXPECTED/WANTED OUTPUT

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

1 个答案:

答案 0 :(得分:1)

您可以尝试迭代每个Map以获取所有键。使用HashSet可以消除重复。

HashSet<String> keys = new HashSet<>();
        for (Entry<String, HashMap<String, List<Integer>>> entry : COOLMAP.entrySet()) {
            for (Entry<String, List<Integer>> innerEntry : entry.getValue().entrySet()) {
                String innerKey = innerEntry.getKey();
                keys.add(innerKey);
            }

然后使用键在地图中搜索值。

String temp;
        Iterator it = keys.iterator();
        while (it.hasNext()) {
            temp = (String) it.next();
            System.out.print(temp + ", ");
            for (Entry<String, HashMap<String, List<Integer>>> entry : COOLMAP.entrySet()) {
                boolean hasValue = false;
                for (Entry<String, List<Integer>> innerEntry : entry.getValue().entrySet()) {
                    String innerKey = innerEntry.getKey();
                    if (innerKey.equals(temp)) {
                        System.out.print(innerEntry.getValue() + ", ");
                        hasValue = true;
                    }
                }
                if (!hasValue) {
                    System.out.print(", ,");
                }
            }
            System.out.println();
        }