2016-07-25 14 views
-1

Ich habe die folgende verschachtelte Map in meiner Klasse definiert:Karte innerhalb Karte Iteration

private Map<String, Map<String, String>> messagesByFactTypeAndCategory; 

public void setMessagesByFactTypeAndCategory(Map<String, Map<String, String>> messagesByFactTypeAndCategory) { 
    this.messagesByFactTypeAndCategory = messagesByFactTypeAndCategory; 
} 

public Map<String, Map<String, String>> getMessagesByFactTypeAndCategory() { 
    if (messagesByFactTypeAndCategory == null) { 
     return Maps.newHashMap(); 
    } 
    return messagesByFactTypeAndCategory; 
} 

Ich versuche aber nicht in der Lage, die messagesByFactTypeAndCategory Karte zu durchlaufen und die Daten innerhalb dieser erhalten in der Konsole angezeigt werden soll.

Unten ist der Code, den ich bisher versucht:

Map<String, Map<String, String>> newMap = executionResult.getMessagesByFactTypeAndCategory(); 
Set set = newMap.entrySet(); 
    Iterator iterator = set.iterator(); 
    while(iterator.hasNext()) { 
     Map.Entry mentry = (Map.Entry)iterator.next(); 
     System.out.print("key is: "+ mentry.getKey() + " & Value is: "); 
     System.out.println(mentry.getValue()); 
    } 

Jede Hilfe ist willkommen!

+0

Was funktioniert nicht? Können Sie den Code dafür bereitstellen? – bradimus

+0

Ihr Code sagt uns nichts. – shmosel

+0

@bradimus Sorry, ich habe gerade getan – BobRoss

Antwort

1

Wenn Sie nur alle Einträge der beiden Karten durchqueren müssen, können Sie es tun, wie folgt:

for (Entry<String, Map<String, String>> outerMapEntry : messagesByFactTypeAndCategory.entrySet()) { 
     // do something with outerMapEntry 
     System.out.println(outerMapEntry.getKey() + " => " + outerMapEntry.getValue()); 
     for (Entry<String, String> innerMapEntry : outerMapEntry.getValue().entrySet()) { 
      // do something with inner map entry 
      System.out.println(innerMapEntry.getKey() + " => " + innerMapEntry.getValue()); 
     } 
    } 

EDIT. Eine Erklärung. Jeder äußere Karteneintrag ist ein Paar String Schlüssel und Map<String, String> Wert. So können Sie bei jeder Iteration etwas sowohl mit Schlüssel als auch mit Wert tun. Zum Beispiel können Sie Schlüssel und Wert so drucken, wie sie sind. Oder Sie können den Wert durchlaufen (es ist ein Map) und drucken Sie jeden Wert Eintrag separat in der inneren Schleife.

Ich glaube, es ist ziemlich klar, wie man "einfache" Karte wie Map<String, String> iterieren kann (siehe How to efficiently iterate over each Entry in a Map?), so gibt es keine Schwierigkeit beim Durchqueren der inneren Karte.