2013-01-04 13 views
16

Un programma di chat di base che ho scritto ha diverse parole chiave che generano azioni speciali, immagini, messaggi, ecc. Conservo tutte le parole chiave e le funzioni speciali in una HashMap. Le parole chiave sono le chiavi e le funzioni sono i valori. Voglio confrontare l'input dell'utente con le chiavi con un certo tipo di loop. Ho provato tutto quello che riesco a pensare e niente funziona. Questo è quello che posso immaginare:Per ogni ciclo su Java HashMap

myHashMap = <File Input> 
for(String currentKey : <List of HashMap Keys>){ 
    if(user.getInput().equalsIgnoreCase(currentKey)){ 
     //Do related Value action 
    } 
} 
... 

Apprezzerei qualsiasi aiuto. Perdonami se ho trascurato una domanda simile o se la risposta è ovvia.

+0

Come stai Memorizzazione di una funzione in un HashMap? Intendi un ascoltatore? –

+0

Puoi ottenere un elenco di chiavi con 'myHashMap.keySet()' se è quello che stai chiedendo. – ApproachingDarknessFish

risposta

22

Beh, si può scrivere:

for(String currentKey : myHashMap.keySet()){ 

ma questo non è davvero il modo migliore per utilizzare un hash-map.

un approccio migliore è per popolare myHashMap con tutti-in minuscolo le chiavi, e poi scrivere:

theFunction = myHashMap.get(user.getInput().toLowerCase()); 

per recuperare la funzione (o null se l'utente-input non appare nella mappa).

+0

Continuo a tornare a questa risposta. Grazie! – Chef1075

0

Un modello meglio qui potrebbe essere:

Value val = hashMap.get(user.getInput()); 
if (val != null) { 
    doVal(); 
} 
else { 
    // handle normal, non-keyword/specfial function 
} 

che sfrutta il fatto che HashMap ritorna null se la chiave non è contenuta nella mappa.

54

Se avete bisogno di accesso sia chiave e il valore allora questo è il modo più efficiente

for(Entry<String, String> e : m.entrySet()) { 
     String key = e.getKey(); 
     String value = e.getValue(); 
    } 
+1

Questo è esattamente quello che stavo cercando! –

+0

Se vuoi l'accesso immutabile a 'Entry', rendi' e' 'final'. – phoenix

4

Solo in Java 8 & sopra

map.forEach((k,v)->System.out.println("Key: " + k + "Value: " + v));