2013-01-04 75 views
16

我寫的一個基本聊天程序有幾個關鍵字,用於生成特殊動作,圖像,消息等。我將所有關鍵字和特殊函數存儲在HashMap中。關鍵詞是關鍵和功能是價值。我想用某種類型的循環比較用戶輸入和鍵。我嘗試了一切我能想到的,沒有任何工作。這是我可以弄清楚的:對於Java上的每個循環HashMap

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

我將不勝感激任何幫助。如果我忽略了一個類似的問題,或者答案很明顯,請原諒我。

+0

你是如何存儲在一個HashMap的功能?你是指聽衆嗎? –

+0

如果你正在問的是什麼,你可以使用'myHashMap.keySet()'得到一個鍵列表。 – ApproachingDarknessFish

回答

22

好了,你可以這樣寫:

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

但這不是真的使用哈希地圖的最佳方式。

一個更好的方法是填充myHashMap採用全小寫鍵,然後寫:

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

檢索功能(或null如果用戶輸入不在地圖上顯示)。

+0

我一直回到這個答案。謝謝! – Chef1075

0

這裏一個更好的模式可能是:

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

這需要的,如果鑰匙未在地圖包含的HashMap返回null的事實。

54

如果你需要同時訪問鍵和值,那麼這是最有效的方式

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

這正是我期待的! –

+0

如果你想不可變地訪問'Entry',使'e'' final'。 – phoenix

4

只有在Java的8 &上述

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