For each loop on Java HashMap

91,675

Solution 1

Well, you can write:

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

but this isn't really the best way to use a hash-map.

A better approach is to populate myHashMap with all-lowercase keys, and then write:

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

to retrieve the function (or null if the user-input does not appear in the map).

Solution 2

If you need access to both key and value then this is the most efficient way

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

Solution 3

Only in Java 8 & above

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

Solution 4

A better pattern here might be:

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

which takes advantage of the fact that HashMap returns null if the key isn't contained in the Map.

Share:
91,675
Taxes45
Author by

Taxes45

Updated on July 05, 2022

Comments

  • Taxes45
    Taxes45 almost 2 years

    A basic chat program I wrote has several key words that generate special actions, images, messages, etc. I store all of the key words and special functions in a HashMap. Key words are the keys and functions are the values. I want to compare user input to the keys with some type of loop. I have tried everything I can think of and nothing works. This is what I can figure out:

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

    I would appreciate any help. Forgive me if I overlooked a similar question or if the answer is obvious.

  • Josh Lowe
    Josh Lowe about 10 years
    This is exactly what I was looking for!
  • phoenix
    phoenix over 6 years
    If you want immutable access to the Entry, make e final.
  • Chef1075
    Chef1075 over 6 years
    I keep coming back to this answer. Thanks!