2011-02-25 29 views
6

¿Cómo obtener los mismos valores de HashMAP?¿Cómo obtener los mismos valores de 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"); 

Los valores de mi HashMap HM son los siguientes:

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

Aquí,

Quiero contar los valores similares en el HM HashMap.

ie) si doy el valor igual a "Rojo" significa que quiero obtener el conteo = 2. si le doy el valor igual a "Azul" significa que quiero obtener el conteo = 2.

¿Cómo obtener los mismos valores de HashMAP HM?

Respuesta

8

bucle a través del conjunto de entrada y soltar todos los valores a un segundo mapa, el primer valor de mapas como una clave, el valor será el recuento:

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

El mapa resultado para su ejemplo debería ser como este :

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

La única manera de hacerlo es a iterar a través de todos los elementos y contar las apariciones:

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

"foreach" no es una palabra clave de Java. –

+0

Corregido ... – kgiannakakis

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

Además, probablemente sea excesivo utilizar un HashMap como la clave si solo está almacenando dos valores. El construido en Point usa int, pero no sería difícil volver a implementarlo con 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"); 
Cuestiones relacionadas