2012-09-01 10 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); 

Wie kann ich wieder eine Reihe von , wie viele Menschen hat den Wertzählen, wie viele HashMap Einträge haben einen bestimmten Wert

+0

Das ist Java, oder? – alfasin

+3

Iterieren Sie die Sammlung * values ​​* und vergleichen Sie jeden Wert mit '1'. – adatapost

+0

Sein Java, Iterate könnte getan werden. Vielleicht gab es einen anderen Weg. – user1621988

Antwort

3

Try this:

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

Warum ändern Sie 'party' mit' Iterator.remove'? Diese Information könnte später benötigt werden. –

+0

Wie genau vermeidest du * 'ConcurrentModificationException' durch * Modifizierung * der Struktur? –

+0

Ich habe keine Ahnung, wovon du sprichst: P – alfasin

2

können Sie verwenden diese

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

Ich würde nur die Colle ctions.frequency() -Methode für die HashMap-Werte, so.

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

Oder die allgemeine Lösung, erstellen Sie eine Karte der Häufigkeit gegen die Nummer.

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 Ihre Lösung ist besser! – alfasin

+0

ich mag es auch ... – ycomp

2

diese Bibliothek Probieren Sie für viele solche Gruppe von Funktion 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()); 

Sie können diese Maven Abhängigkeiten

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

importieren müssen

und hamcrest matchers für

equalTo(1) 
Verwandte Themen