hasmap打印出来的哈希图



我试图打印出包含字符作为键的哈希图,而值则是带有整数和double的另一个hashmap我到目前为止有这个,但没有工作。

HashMap<Character, Map<Integer, Double>> MapInsideOfAMap = calc.MapInAMap(abc);
    for (Entry<Character, Map<Integer, Double>> outer : MapInsideOfAMap.entrySet()) {
        System.out.println("Char: " + outer.getKey() + "n");
        for (Map.Entry<Character, Map<Integer, Double> inner : MapInsideOfAMap.getValue().entrySet()) {
            System.out.println("int = " + inner.getKey() + ", double = " + inner.getValue());
        }
    }

您的代码应该像这样,

for (Entry<Character, Map<Integer, Double>> outer : MapInsideOfAMap.entrySet()) {
        System.out.println("Char: " + outer.getKey() + "n");
        for (Entry<Integer, Double> inner : MapInsideOfAMap.get(outer.getKey()).entrySet()) {
            System.out.println("int = " + inner.getKey() + ", double = " + inner.getValue());
        }
    }

好吧,我了解您要做什么,由于您已经获得了外部地图条目,因此您不必再次使用外部地图参考,您可以直接这样做,

for (Entry<Character, Map<Integer, Double>> outer : MapInsideOfAMap.entrySet()) {
        System.out.println("Char: " + outer.getKey() + "n");
        for (Entry<Integer, Double> inner : outer.getValue().entrySet()) {
            System.out.println("int = " + inner.getKey() + ", double = " + inner.getValue());
        }
    }

让我们假设您的地图看起来像这样:

Map <Character, Map<Integer, Double>> MapInsideOfAMap = new HashMap();

然后您可以像这样打印地图:

for (Entry<Character, Map<Integer, Double>> outer : MapInsideOfAMap.entrySet()) {
    System.out.println("Char: " + outer.getKey() + "n");
    HashMap<Integer, Double> innermap = MapInsideOfAMap.get(outer.getKey());
    for (Map.Entry<Integer, Double> innerEntry : innermap.entrySet()) {
         System.out.println("int = " + innerEntry.getKey() + ", double = " + innerEntry.getValue());
    }
}

如果您只需要查看地图键/值,请使用System.out.println

地图AbstractMap.toString知道如何以一种不错的可读方式打印自身。

Map<Character, Map<Integer, Double>> map = new HashMap<>();
map.put('A', new HashMap<>());
map.get('A').put(1, 0.01);
map.put('B', new HashMap<>());
map.get('B').put(2, 0.02);
System.out.println(map);

打印出来:

{A={1=0.01}, B={2=0.02}}

简单地打印出整个地图:

System.out.println(mapInsideOfAMap);

现在,如果要迭代外部图和内部地图并打印其键/值对,则可以使用Map.forEach方法:

mapInsideOfAMap.forEach((outerKey, outerValue) -> {
    System.out.println("Char: " + outerKey + "n");
    outerValue.forEach((innerKey, innerValue) -> 
        System.out.println("int = " + innerKey + ", double = " + innerValue));
});
public static void main(String z[]) {
    Map<Character, Map<Integer, Double>> MapInsideOfAMap = getmapOfMap();
    for (Entry<Character, Map<Integer, Double>> outer : MapInsideOfAMap.entrySet()) {
        System.out.println("Char: " + outer.getKey() + "n");
        Map<Integer, Double> mapInner = MapInsideOfAMap.get(outer.getKey());
        for (Map.Entry<Integer, Double> inner : mapInner.entrySet()) {
             System.out.println(inner.getKey() +":"+ mapInner.get(inner.getKey()));
        }
    }
}
private static Map getmapOfMap() {
    char[] chArr = {'a','b','c','d','e','f','g','h','i','j','k'};
    HashMap<Character, Map<Integer, Double>> mapInsideOfAMap = new HashMap<Character, Map<Integer, Double>>();
    for(char ch:chArr) {
        mapInsideOfAMap.put(ch, getInnterMap());
    }
    return mapInsideOfAMap;
}
private static Map getInnterMap() {
     Map<Integer, Double> map = new HashMap<>();
     for(int i=1000;i<1010;i++) {
         map.put(i, new Double(String.valueOf(i)));
     }
     return map;
}

在第二个循环中,您需要从外循环中访问作为值获得的映射。您还需要更改第二个循环中条目的类型。

尝试此代码:

for (Entry<Character, Map<Integer, Double>> outer : MapInsideOfAMap.entrySet()) {
    System.out.println("Key: " + outer.getKey() + "n");
    for (Entry<Integer, Double> inner : outer.getValue().entrySet()) {
        System.out.println("Key = " + inner.getKey() + ", Value = " + inner.getValue());
    }
}

,但结构的复杂性可能是冗余的。

public static void print(char keyData, Map<Character, Map<Integer, Double>> fromData) {
    System.out.println("print: " + get(keyData, fromData));
}
public static Map<Integer, Double> get(char keyData, Map<Character, Map<Integer, Double>> fromData) {
    for (Map.Entry<Character, Map<Integer, Double>> entry : fromData.entrySet()) {
        Character key = entry.getKey();
        if(key.equals(keyData))
            return entry.getValue();
    }
    return Collections.emptyMap();
}

最新更新