2016-02-12 7 views
5

Ich verwende die MultiKeyMap aus den commons-collections, die Multi- key-Wert-Paare bereitstellen. Ich habe 3 Schlüssel, die Strings sind. Ich habe zwei Probleme, die ich nicht lösen kann.Wie über MultiKeyMap iterieren?

Wie kann ich über alle Mehrkopf-Wert-Paare iterieren? Mit einer einfachen HashMap weiß ich es.

Zweitens, wie kann ich alle Mehrfarben-Wert-Paare mit den ersten beiden Tasten behoben bekommen? Das heißt, ich möchte so etwas bekommen multiKey.get("key1","key2",?); Wo der dritte Schlüssel nicht angegeben ist.

+1

Was ist los mit 'mapIterator()'? – Marvin

+0

also, hast du eine hashmap von hashmaps? Ich bin neugierig, wenn Sie diese Multi-Key-Design tun Sie nicht tun, etwas wie: multiKey.get ("key1: key2"); So ist der String 'key' eigentlich key1 und key2 zusammen verkettet. – Fallenreaper

+0

@Marvin hat Ihre erste Frage vernagelt und die Antwort auf die zweite ist, dass Sie keine Teilübereinstimmung machen können, da sie nicht von der API unterstützt wird: https://commons.apache.org/proper/commons-collections/apidocs/org/ apache/commons/collections4/map/MultiKeyMap.html # dekoriert() – alfasin

Antwort

3

Iteration über Schlüsselwert für MultiKeyMap ist ähnlich Karte hash:

MultiKeyMap<String, String> multiKeyMap = new MultiKeyMap(); 

    multiKeyMap.put("a1", "b1", "c1", "value1"); 
    multiKeyMap.put("a2", "b2", "c2", "value1"); 

    for(Map.Entry<MultiKey<? extends String>, String> entry: multiKeyMap.entrySet()){ 
     System.out.println(entry.getKey().getKey(0) 
       +" "+entry.getKey().getKey(1) 
       +" "+entry.getKey().getKey(2) 
       + " value: "+entry.getValue()); 
    } 

Für Ihre zweite Anfrage können Sie Ihre eigene Methode basiert auf der vorherigen Iteration schreiben.

public static Set<Map.Entry<MultiKey<? extends String>, String>> match2Keys(String first, String second, 
                       MultiKeyMap<String, String> multiKeyMap) { 
     Set<Map.Entry<MultiKey<? extends String>, String>> set = new HashSet<>(); 
     for (Map.Entry<MultiKey<? extends String>, String> entry : multiKeyMap.entrySet()) { 
      if (first.equals(entry.getKey().getKey(0)) 
       && second.equals(entry.getKey().getKey(1))) { 
       set.add(entry); 
      } 
     } 
     return set; 
    } 
+0

Der erste Teil kompiliert nicht für mich. –