2013-01-04 13 views
16

Podstawowy program do czatowania, który napisałem, zawiera kilka słów kluczowych, które generują specjalne akcje, obrazy, wiadomości itp. Przechowuję wszystkie kluczowe słowa i specjalne funkcje w HashMap. Kluczowe słowa to klucze, a funkcje to wartości. Chcę porównać dane wejściowe użytkownika z kluczami za pomocą pewnego rodzaju pętli. Próbowałem wszystkiego, co mogę wymyślić i nic nie działa. Oto, co mogę wymyślić:Dla każdej pętli na Java HashMap

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

Byłbym wdzięczny za każdą pomoc. Wybacz mi, jeśli przeoczyłem podobne pytanie lub odpowiedź jest oczywista.

+0

Jak ty przechowywania funkcję w HashMap? Masz na myśli słuchacza? –

+0

Możesz otrzymać listę kluczy z 'myHashMap.keySet()' jeśli o to pytasz. – ApproachingDarknessFish

Odpowiedz

22

Cóż, można napisać:

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

ale nie jest to najlepszy sposób, aby użyć skrótu-mapę.

Lepszym rozwiązaniem jest, aby wypełnić myHashMap ze wszystkimi-małe klawisze, a następnie napisać:

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

odzyskać funkcję (lub null jeśli użytkownik-wejściowy nie pojawi się na mapie).

+0

Wciąż wracam do tej odpowiedzi. Dzięki! – Chef1075

0

Lepszy wzór tutaj może być:

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

który wykorzystuje fakt, że HashMap powraca null jeśli klucz nie jest zawarte w mapie.

54

Jeśli potrzebujesz dostępu do zarówno klucz i wartość, to jest to najbardziej skuteczny sposób

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

Tego właśnie szukałem! –

+0

Jeśli chcesz mieć niezmienny dostęp do 'Entry', zrób' e' 'final'. – phoenix

4

Tylko w Java 8 & powyżej

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