在Java中访问Map中的单个值

时间:2014-08-07 21:12:31

标签: java collections maps iteration key-value

如果之前有人问过,请先道歉。我已经搜索过,找不到类似的东西,所以手指交叉。

好的,我想要做的是在TreeMap中调用单个对象的方法。我知道关键值并尝试使用.get()但是当我这样做时,虽然它返回了对象引用,但我无法用它做任何事情。

长话短说是否有办法从TreeMap中的对象调用方法,而不必遍历整个过程中的整个事物?我觉得我误解了一些非常简单的东西,但是我看得越多,我就越迷惑自己。我理解如何使用keySets等迭代并访问地图中的所有值,但是当涉及到这个特定的动作时,我的脑子会画一个空白。

如果它有所不同,那么关键是整数,而且值是我自己创造的一个类。我试图访问我在课堂上为特定键创建的getName()方法,但似乎无法弄明白。

由于

编辑:我将尝试发布以下代码,发布可能相关的任何内容(对不起,如果其中任何内容不是)

公共课堂战斗 {

TreeMap<Integer, Enemy> enemies = new TreeMap<Integer, Enemy>();
TreeMap<Integer, Character> battleCharacters;
int enemiesAlive;
int totalXp;

public Battle(TreeMap characters, int floorNumber)
{
    createEnemies(floorNumber);
    battleCharacters = new TreeMap<Integer, Character>(characters);

    enemiesAlive = 6;
    totalXp = 0;

    for (Map.Entry<Integer, Enemy> entry : enemies.entrySet())
    {
        totalXp = totalXp + entry.getValue().getExperienceValue();
    }
}

[...]

public void battleLoop()
{
    System.out.println("Battle!");
    System.out.println("Your Party:");
    System.out.println(battleCharacters.get(1).statusReport()); //this doesn't work
    {
        //will be changed
        enemiesAlive--;
    }
}

public void battleReport()
{
    for (int key : enemies.keySet())
    {
        enemies.get(key).statusReport(); //this works
    }
}

2 个答案:

答案 0 :(得分:2)

我的猜测:您有一个TreeMap作为原始类型而不是TreeMap<Integer, YourObjectType>。因此,get方法的返回类型为Object,您无法在该类型上调用您的方法。

你得到的是你的对象,你可以向我们的课堂,但你应该更好地参数化你的TreeMap

答案 1 :(得分:0)

前提是您已正确创建地图......

TreeMap<Integer, MyObj> myMap = new TreeMap<>();
// ... add data to map
myMap.get(myKey).getName();