【问题标题】:For each loop on Java HashMap对于 Java HashMap 上的每个循环
【发布时间】:2012-12-18 11:15:26
【问题描述】:

我编写的一个基本聊天程序有几个关键词,可以生成特殊动作、图像、消息等。我将所有关键词和特殊函数存储在一个 HashMap 中。关键字是键,功能是值。我想将用户输入与某种循环的键进行比较。我已经尝试了我能想到的一切,但没有任何效果。这是我能想到的:

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

如果有任何帮助,我将不胜感激。如果我忽略了类似的问题或者答案很明显,请见谅。

【问题讨论】:

标签: java loops hashmap


【解决方案1】:

如果您需要同时访问键和值,那么这是最有效的方法

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

【讨论】:

  • 这正是我想要的!
  • 如果您想要对Entry 的不可变访问,请设置e final
【解决方案2】:

好吧,你可以写:

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

但这并不是使用哈希映射的最佳方式。

更好的方法是使用全小写键填充myHashMap,然后编写:

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

检索函数(或null,如果用户输入未出现在地图中)。

【讨论】:

  • 我不断回到这个答案。谢谢!
【解决方案3】:

仅适用于 Java 8 及更高版本

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

【讨论】:

    【解决方案4】:

    这里更好的模式可能是:

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

    如果键不包含在 Map 中,它利用了 HashMap 返回 null 的事实。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      • 2015-12-03
      • 2020-10-09
      • 1970-01-01
      • 2013-11-22
      • 2020-05-11
      • 1970-01-01
      相关资源
      最近更新 更多