2013-01-04 43 views
16

Một chương trình trò chuyện cơ bản mà tôi đã viết có một số từ khóa tạo các hành động, hình ảnh, tin nhắn đặc biệt, v.v. Tôi lưu trữ tất cả các từ khóa và các chức năng đặc biệt trong HashMap. Các từ khóa là các khóa và hàm là các giá trị. Tôi muốn so sánh đầu vào của người dùng với các khóa bằng một số loại vòng lặp. Tôi đã thử tất cả mọi thứ tôi có thể nghĩ và không có gì hoạt động. Đây là những gì tôi có thể tìm ra:Đối với mỗi vòng lặp trên Java HashMap

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

Tôi sẽ đánh giá cao bất kỳ trợ giúp nào. Tha thứ cho tôi nếu tôi bỏ qua một câu hỏi tương tự hoặc nếu câu trả lời là hiển nhiên.

+0

How are you lưu trữ một chức năng trong một HashMap? Bạn có nghĩa là một người nghe? –

+0

Bạn có thể lấy danh sách các khóa bằng 'myHashMap.keySet()' nếu đó là những gì bạn đang yêu cầu. – ApproachingDarknessFish

Trả lời

22

Vâng, bạn có thể viết:

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

nhưng điều này là không thực sự là cách tốt nhất để sử dụng một hash-map.

Một cách tiếp cận tốt hơn là để cư myHashMap với tất cả chữ thường phím, và sau đó viết:

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

để lấy chức năng (hoặc null nếu sử dụng đầu vào không xuất hiện trong bản đồ).

+0

Tôi tiếp tục quay lại câu trả lời này. Cảm ơn! – Chef1075

0

Một mô hình tốt hơn ở đây có thể là:

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

mà lợi dụng thực tế là HashMap trả null nếu phím không được chứa trong các bản đồ.

54

Nếu bạn cần truy cập vào cả hai khoá và giá trị thì đây là cách hiệu quả nhất

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

Đây chính xác là những gì tôi đang tìm kiếm! –

+0

Nếu bạn muốn truy cập bất biến vào 'Entry', hãy tạo' e'' final'. – phoenix

4

Chỉ trong Java 8 & trên

map.forEach((k,v)->System.out.println("Key: " + k + "Value: " + v)); 
Các vấn đề liên quan