在For Each风格中迭代HashMap

时间:2013-07-24 02:15:07

标签: java hashmap

我想遍历'character'HashMap并使用类似于每个循环的东西来抓取所有'Stat'对象。例如,我想创建一个名为'showStats'的函数。为此,我希望能够输出“字符”HashMap中包含的所有“stat”对象。有谁知道怎么做?

HashMap<String, GameObject> character = new HashMap<String, GameObject>;
character.put("Health", new Stat("Health",10));
character.put("Accuracy", new Stat("Accuracy",10));
character.put("Strength", new Stat("Strength",10));
character.put("Coins",new Item("Coins","Your Money"));
character.put("Head",new BodyPart("Head"));

3 个答案:

答案 0 :(得分:4)

使用values集合

for(GameObject gameObject : character.values()) { 
    if(gameObject instanceof Stat) { }
}

答案 1 :(得分:1)

您可以使用values()接口中的Map方法仅迭代值,或者您也可以使用entrySet()方法迭代每个Map条目:

for (Map.Entry<String, GameObject> entry : character.entrySet()) {
    String key = entry.getKey();
    GameObject gameObject = entry.getValue();
    // do something with key or gameObject here...
}

此处Map界面的更多信息: http://docs.oracle.com/javase/7/docs/api/java/util/Map.html

希望有所帮助。

答案 2 :(得分:1)

如果您需要访问角色名称(或任何密钥),您可以这样做:

for (String s : characters.keySet()) { 
    GameObject go = characters.get(s);
    if (go instanceof Stat) { 
        System.out.println("Character name: " + s);
        System.out.println("Stats: " + go)
    }
}