2016-02-12 509 views
5

我正在使用提供多鍵值對的公共集合中的MultiKeyMap。我有3個鍵是絃樂。我有兩個問題,我不知道如何解決。如何遍歷MultiKeyMap?

如何迭代所有多鍵值對?用一個簡單的HashMap我知道它。

其次,我怎樣才能得到固定的前兩個鍵的所有多鍵值對?這意味着我想得到像這樣的東西multiKey.get("key1","key2",?);沒有指定第三個鍵。

+1

'mapIterator()'有什麼問題? – Marvin

+0

那麼,你有hashmaps的散列表嗎?我很好奇,如果你正在做這種多鍵設計,你沒有做這樣的事情:multiKey.get(「key1:key2」);這樣,字符串'key'實際上是key1和key2連接在一起的。 – Fallenreaper

+0

@Marvin指出你的第一個問題,第二個問題的答案是你不能進行部分匹配,因爲它不被API支持:https://commons.apache.org/proper/commons-collections/apidocs/org/ apache/commons/collections4/map/MultiKeyMap.html#decorated() – alfasin

回答

3

遍歷所有的MultiKeyMap鍵值類似於散列映射:

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

對於你的第二個要求,您可以根據前一次迭代寫你自己的方法。

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

第一部分不爲我編譯。 –