Печать HashMap из HashMaps: Map.Entry или java8

У меня есть метод, который возвращает hashmap из hashmaps

HashMap<String, HashMap<String, String>> mapofmaps = abcd(<String>, <Integer>);

Я пытаюсь напечатать внешний хэш-карту, используя следующий код

for (Entry<String, HashMap<String, String>> entry : mapofmaps.entrySet()) {
            String key = entry.getKey();
            System.out.println(key);

      HashMap<String, String> value = entry.getValue();
            System.out.println(key + "\t" + value);
        }

Я хотел бы перебрать внутреннюю карту. Какой будет переменная entryset там (??? в коде).

for (Entry<String, HashMap<String, String>> entry : mapofmaps.entrySet()) {
                String key = entry.getKey();
                System.out.println(key);
    for(Entry<String, HashMap<String, String>> entry : ????.entrySet()){
          HashMap<String, String> value = entry.getValue();
                System.out.println(key + "\t" + value);
            }}

Правильна ли моя логика для печати хеш-карт? или есть лучший способ сделать это?

1 ответ

Решение

Это будет entry.getValue().entrySet()так

 for(Entry<String, String> innerEntry : entry.getValue().entrySet()){

тогда вы можете использовать

    String key    = innerEntry.getKey();
    String value  = innerEntry.getValue();

Стоит отметить, что это также может быть сделано с помощью Java 8 Streams и лямбда-выражений

    HashMap<String, HashMap<String, String>> mapofmaps = new HashMap<>();

    HashMap<String,String> map1 = new HashMap<>();
    map1.put("map1_key1", "map1_value1");

    HashMap<String,String> map2 = new HashMap<>();
    map2.put("map2_key1", "map2_value1");

    mapofmaps.put("map1", map1);
    mapofmaps.put("map2", map2);

     // To print the keys and values
     mapofmaps.forEach((K,V)->{                 // mapofmaps entries
         V.forEach((X,Y)->{                     // inner Hashmap enteries
             System.out.println(X+" "+Y);       // print key and value of inner Hashmap 
         });
     });

mapofmaps.forEach((K,V) : Это ожидает лямбда-выражения, которые принимают два входа, то есть Key (String) и Value (HashMap)

V.forEach((X,Y)->{ : Как это применяется на внутреннем (V: извлечено из предыдущего foreach) hashmap, поэтому и Key, и Value будут строками

Ссылка для дальнейшего чтения:

Прямой пример с данными

Map<String, Integer> map = new HashMap<>();
map.put("Apple", 10);
    map.put("Motorolla", 20);
    map.put("RealMe", 30);
    map.put("Oppo", 40);
    map.put("Sony", 50);
    map.put("OnePlus", 60);

    for (Map.Entry<String, Integer> entry : map.entrySet()) {
        System.out.println(entry.getKey() + ", Stock : " + entry.getValue());
    }

Использование лямбда-выражения

map.forEach((K,V) -> System.out.println(K + ", Stock : " + V));
Другие вопросы по тегам