Java Hashmap:从给定的ARRAY值中获取密钥

时间:2015-05-14 18:24:20

标签: java arrays hashmap key

我有一个名为prizeWinners的hashMap。 hashMap中每对的关键是赢得诺贝尔奖的那一年。该值是获胜者的名称。值是一系列字符串,因为在任何给定的奖品年度,最多可以有3个获奖者。我的问题是:鉴于获胜者的名字,请返回获奖者的年份。有趣的是,返回值也需要是一个字符串:public String getYearWon(String name),其中name是获胜者的名字。

public class NobelPrizeWinners
{
    private HashMap<Integer, String[]> prizeWinners;

    public NobelPrizeWinners
    {
      prizeWinners = new HashMap<Interger, String[]>();
      prizeWinners.put(2009, new String[] {"Barack H. Obama"});
      prizeWinners.put(2008, new String[] {"Martti Ahtisaari"};
      prizeWinners.put(2007, new String[] {"IAEA", "Mohamed ElBaradei"});
      //and many more
    }

    public String getYearWon(String name)
    {
       //code here
    }
}

这就是我陷入困境的地方:我似乎无法正确访问数组来迭代它并获得密钥。我的作业中有几种方法要求我这样做(例如,打印出所有获奖者的名字),但我只获得了hashmap地址,而不是数组本身的内容。

1 个答案:

答案 0 :(得分:1)

通过prizeWinner键(年)迭代。对于每年,获取获胜者String数组并将其转换为列表,然后调用contains方法以查看获胜者列表是否包含作为参数传递的获胜者名称。如果是这种情况,我们会停止循环并将年份作为字符串返回。如果我们经历了多年,但没有找到获胜者的名字,我们将返回null

private HashMap<Integer, String[]> prizeWinners;

public PartsPortlet()
{
    prizeWinners = new HashMap<Integer, String[]>();
    prizeWinners.put(2009, new String[]{"Barack H. Obama"});
    prizeWinners.put(2008, new String[]{"Martti Ahtisaari"};
    prizeWinners.put(2007, new String[]{"IAEA", "Mohamed ElBaradei"});
    //and many more
}

public String getYearWon(String name) {
    for (int year : prizeWinners.keySet()) {
        if (Arrays.asList(prizeWinners.get(year)).contains(name)) {
            return String.valueOf(year);
        }
    }
    return null;
}