2016-02-12 9 views
5

Sto usando il MultiKeyMap dalle collezioni di comuni che forniscono coppie di valori multipli. Ho 3 chiavi che sono stringhe. Ho due problemi che non vedo come risolvere.Come eseguire iterazioni su MultiKeyMap?

Come è possibile eseguire l'iterazione su tutte le coppie di valori multipli? Con una semplice HashMap lo so.

In secondo luogo, come è possibile ottenere tutte le coppie di valori multipli con i primi due tasti fissi? Ciò significa che mi piacerebbe ottenere qualcosa di simile a questo multiKey.get("key1","key2",?); dove la terza chiave non è specificata.

+1

Cosa c'è di sbagliato in 'mapIterator()'? – Marvin

+0

quindi, hai una hashmap di hashmap? Sono curioso di sapere se stai facendo questo progetto multi-tasto che non hai fatto qualcosa di simile: multiKey.get ("key1: key2"); in questo modo la stringa 'key' è in realtà key1 e key2 concatenati insieme. – Fallenreaper

+0

@Marvin ha inchiodato la prima domanda e la risposta alla seconda è che non è possibile eseguire una corrispondenza parziale poiché non è supportata dall'API: https://commons.apache.org/proper/commons-collections/apidocs/org/ apache/commons/collections4/map/MultiKeyMap.html # decorated() – alfasin

risposta

3

iterazione su valore-chiave per MultiKeyMap è simile a hash mappa:

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()); 
    } 

Per la vostra seconda richiesta si può scrivere il proprio metodo in base alla precedente iterazione.

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

La prima parte non viene compilata per me. –