2013-01-09 64 views
-1

請不要考慮這個問題的重複,雖然我有一個類似的問題早,但這次是不同的計算..關於總鑰匙

Map <String, String>m = new LinkedHashMap<String, String>(); 
m.put ("123", "23"); 
m.put ("323", "23"); 
m.put ("153", "23"); 
m.put ("623", "23"); 
m.put ("125", "23"); 
m.put ("122", "24"); 
m.put ("167", "24"); 
m.put ("173", "24"); 
m.put ("113", "25"); 

我需要找出密鑰相關聯的數與如上圖所示,5個鍵關聯的病人標識23在這裏,我按照下面的方法

List<String> keys = new ArrayList<String>(); 
     for(String str: m.keySet()) 
     { 
      if(m.get(str).equals("23")) { 
       keys.add(str); 
       System.out.println(str); 
      } 
     } 

請指教還有沒有其他的方法也這是喜歡做比較器或別的什麼更有效。

+0

這是一個重複的:http://stackoverflow.com/questions/14242951/regarding-counting-the-total-of-different-keys – MrSmith42

+0

你說,這個問題是你的前一個不同,但我不明白它有什麼不同。 – NPE

+0

你的鑰匙必須是字符串嗎?他們可以是整數而不是? –

回答

1

使用Map.entrySet()遍歷地圖並檢查是否存在匹配增加計數。

它真的不清楚,如果你想計數或按鍵的總和:

如果你只想計數:

Map<String, String>m = new LinkedHashMap<String, String>(); 
     int count=0; 
     for(Map.Entry<String,String> en: m.entrySet()){ 
      if(en.getValue().equals("23")){ 
       count++; 
      } 

     } 
     System.out.println(count); 

如果你想和:

Map<String, String>m = new LinkedHashMap<String, String>(); 
     int sum=0; 
     for(Map.Entry<String,String> en: m.entrySet()){ 
      if(en.getValue().equals("23")){ 
       sum+=Integer.parseInt(en.getKey()); 
      } 

     } 
     System.out.println(sum); 
+0

+1使「Integer」鍵變得簡單。 –

+0

@PeterLawrey謝謝,但大聲笑,我剛剛編輯它,我認爲OP想要的數量,而不是總和..:P – PermGenError

0
for(String str: m.values()) 
     { 
      if(m.equals("23")) { 
       keys.add(str); 

      } 
     } 

您正在避免哈希查找。另外,如果你只需要計數;然後

int count = 0; 
for(String str: m.values()) 
      { 
       if(m.equals("23")) { 
        count++ 
       } 
      } 
return count;