2010-10-14 11 views
19

Ich muss durch google multimap iterieren. AberWie durch iterate google multimap

  1. Ich benutze jdk 1.4 und kann nicht auf höhere Version wechseln. Also kann ich keine generischen Features verwenden.
  2. Meine Multimap kann mehrere Werte für einen Schlüssel haben.
  3. Es könnte eine Situation sein, wenn ein Wert von multimap multimap an sich

Antwort

39

Google Collections (jetzt Guava) ist eine Java 1.5-Bibliothek ... selbst wenn es in Java 1.4 keine Generika gibt, verwendet es wahrscheinlich Dinge, die in 1.5 hinzugefügt wurden, was es inkompatibel macht. Das heißt, es gibt verschiedene Möglichkeiten, eine Multimap zu durchlaufen.

Sie können durch alle Werte durchlaufen:

for (Object value : multimap.values()) { ... } 

oder alle Schlüssel (ein Schlüssel, der auf mehrere Werte abbildet mehrfach in der Iteration kommen):

for (Object key : multimap.keys()) { ... } 

Oder der Schlüsselsatz:

for (Object key : multimap.keySet()) { ... } 

Oder die Einträge:

for (Map.Entry entry : multimap.entries()) { ... } 

Oder der Wert Collection s:

for (Collection collection : multimap.asMap().values()) { ... } 

Sie können auch die entsprechenden Collection für jede Taste in der get mit keySet() erhalten, wie durch bwawok beschrieben.

Edit: Ich glaube nicht, über die Tatsache, dass Java 1.4 nicht die foreach-Schleife entweder hat, so natürlich über jede Schleife würde geschrieben werden muß direkt die Iterator s verwenden.

+0

kann ich nicht glauben, dass ich so dumm bin, dass ich Dinge wie HashMap > seit Jahren erstelle, anstatt eine Multi-Map zu verwenden – ycomp

10

ich auf Java bin 6, aber das sollte ziemlich nah dran sein ... sorry, wenn ich etwas java 1.4ish

verpasst
Set keySet = listmultimap.keySet(); 
    Iterator keyIterator = keySet.iterator(); 
    while (keyIterator.hasNext()) { 
     String key = (String) keyIterator.next(); 
     List values = listmultimap.get(key); 

    } 

Jeder bekommen bekommen Sie alles zurück, die diesen Schlüssel abgestimmt. Dann kannst du sie entweder abziehen oder tun, was du willst.

+0

Es gibt ein einziges Problem mit meinem Code ist. Mein HashMultimap kann HashMultimap als Wert haben. und get() gibt Set zurück. Ich kann es nicht erneut auf HashMultimap für Rekursion anwenden. –

+0

Kannst du den Anwendungsfall einer Multimap von Multimaps beschreiben :) Scheint wie vielleicht du könntest es überdenken, um eine vernünftigere Datenstruktur zu sein, nein? – bwawok

+0

Ich konvertiere eine XML-Datei (klein, also kein Problem) in eine Multimap. Da ein Tag Tags enthalten kann. Eine Multimap kann also eine Multi-Karte enthalten. –

2

Wenn Sie Guave multimap verwenden, werden die Werte in Sammlung gespeichert, Liste nicht

Set<String> keys = multiMap.keySet(); 
    for (String keyprint : keys) { 
     System.out.println("Key = " + keyprint); 
     Collection<String> values = multiMap.get(keyprint); 
     for(String value : values){ 
      System.out.println("Value= "+ value); 
     } 
    }