2012-09-01 64 views
7
public final static HashMap<String, Integer> party = new HashMap<String, Integer>(); 
party.put("Jan",1); 
party.put("John",1); 
party.put("Brian",1); 
party.put("Dave",1); 
party.put("David",2); 

¿Cómo puedo devolver un número de cuántas personas tiene el valorcontar cuántas entradas HashMap tienen un valor dado

+0

Esto es Java, ¿no? – alfasin

+3

Iterate la colección * values ​​* y compara cada valor con '1'. – adatapost

+0

Su java, Iterate podría hacerse. Tal vez haya otra forma. – user1621988

Respuesta

3

Prueba esto:

int counter = 0; 
Iterator it = party.entrySet().iterator(); 
while (it.hasNext()) { 
    Map.Entry pairs = (Map.Entry)it.next(); 
    if(pairs.getValue() == 1){ 
    counter++; 
    }  
} 
System.out.println("number of 1's: "+counter); 
+1

¿Por qué modifica 'party' utilizando' Iterator.remove'? Esa información podría ser necesaria más tarde. –

+0

¿Cómo exactamente * evitas * 'ConcurrentModificationException' * modificando * la estructura? –

+0

No tengo idea de lo que estás hablando: P – alfasin

2

puede utilizar esto

HashMap<String, Integer> party = new HashMap<String, Integer>(); 
party.put("Jan",1); 
party.put("John",1); 
party.put("Brian",1); 
party.put("Dave",1); 
party.put("David",2); 

Set<Entry<String, Integer>> set = party.entrySet(); 
for (Entry<String, Integer> me : set) { 
    if(me.getValue()==1) 
    System.out.println(me.getKey() + " : " + me.getValue()); 
} 
14

Yo solo usaría el Colle método ctions.frequency() en los valores de HashMap, como este.

int count = Collections.frequency(party.values(), 1); 
System.out.println(count); 
===> 4 

O en la solución general, genere un mapa de frecuencia con el número.

Map<Integer, Integer> counts = new HashMap<Integer, Integer>(); 
for (Integer c : party.values()) { 
    int value = counts.get(c) == null ? 0 : counts.get(c); 
    counts.put(c, value + 1); 
} 
System.out.println(counts); 
==> {1=4, 2=1} 
+0

+1 ¡su solución es mejor! – alfasin

+0

me gusta también ... – ycomp

2

Pruebe esta biblioteca para una gran cantidad de estos grupos por la función http://code.google.com/p/lambdaj/wiki/LambdajFeatures

HashMap<String, Integer> party = new HashMap<String, Integer>(); 
    party.put("Jan",1); 
    party.put("John",1); 
    party.put("Brian",1); 
    party.put("Dave",1); 
    party.put("David",2); 
    List<Integer> list = filter(equalTo(1),party.values()); 
    System.out.println(list.size()); 

Es posible que tenga que importar estas dependencias de Maven

<dependency> 
     <groupId>com.googlecode.lambdaj</groupId> 
    <artifactId>lambdaj</artifactId> 
    <version>2.3.3</version> 

y matcrest matchers para

equalTo(1) 
Cuestiones relacionadas