2011-02-25 46 views
6

如何從HashMAP中統計相同的值?是如何從HashMap中統計相同的值?

HashMap<HashMap<String, Float>, String> HM=new HashMap<HashMap<String,Float>, String>(); 

HashMap<String, Float> h; 

h=new HashMap<String, Float>();       
h.put("X", 48.0f); 
h.put("Y", 80.0f);  
HM.put(typeValuesHM, "Red"); 

h=new HashMap<String, Float>(); 
h.put("X", 192.0f); 
h.put("Y", 80.0f); 
HM.put(typeValuesHM, "Red"); 

h=new HashMap<String, Float>(); 
h.put("X", 192.0f); 
h.put("Y", 320.0f); 
HM.put(typeValuesHM, "Blue"); 

h=new HashMap<String, Float>(); 
h.put("X", 336.0f); 
h.put("Y", 560.0f); 
HM.put(typeValuesHM, "Blue"); 

我的HashMap HM的值如下:

{ {x=48,y=80}=Red,{x=192,y=80}=Red,{x=192,y=320}=Blue,{x=336,y=560}=Blue } 

這裏,

我想在HashMap中HM計數相似的價​​值觀。如果我給的價值等於「紅色」意味着我想要計數= 2。 如果我給的價值等於「藍色」意味着我想要計數= 2。

如何從HashMAP HM中統計相同的值?

回答

8

循環遍歷條目集並丟棄所有值的第二圖,第一映射值作爲密鑰,該值將是計數:

Map<String, Integer> result = new TreeMap<String, Integer>(); 
for (Map.Entry<Map<String, Float>> entry:HM.entrySet()) { 
    String value = entry.getValue(); 
    Integer count = result.get(value); 
    if (count == null) 
     result.put(value, new Integer(1)); 
    else 
     result.put(value, new Integer(count+1)); 
} 

結果地圖爲你的榜樣應該是這樣的:

{"Red"=2, "Blue"=2} // values are stored as Integer objects 
2

你能做到這一點的唯一方法是通過所有的元素進行迭代和計數的出現:

for(String value: hm.values()) { 
    if (value.equals(valueToCompare)) { 
    count++; 
    } 
} 
+0

「的foreach」 是不是Java的關鍵字。 – 2011-02-26 21:14:47

+0

更正了它... – kgiannakakis 2011-02-28 07:18:21

0
int countValue(String toMatch) { 
    int count = 0; 
    for (String v : HM.values()) { 
    if (toMatch.equals(value)) { 
     count++; 
    } 
    } 
    return count; 
} 

此外,如果您只是存儲兩個值,則使用HashMap作爲關鍵字可能是矯枉過正。內置的Point使用int,但用float重新實現並不困難。

0
Iterator<String> iter = HM.values().iterator(); 
    while(iter.hasNext()) { 
     String color = iter.next(); 

     if(color.equals("Red")) { 

     } else if(color.equals("Green")) { 

     } else if(color.equals("Blue")) { 

     } 
    } 
9
int count = Collections.frequency(new ArrayList<String>(HM.values()), "Red");