【问题标题】:Java Hashmap: Get key from a given ARRAY of valuesJava Hashmap:从给定的值数组中获取键
【发布时间】:2015-05-14 18:24:20
【问题描述】:

我有一个名为 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
    }
}

这就是我卡住的地方:我似乎无法正确访问数组以遍历它并获取密钥。我的作业中有几种方法需要我这样做(例如,打印出所有获胜者的姓名),但我只得到哈希图地址,而不是数组本身的内容。

【问题讨论】:

  • 检查这个:stackoverflow.com/questions/1066589/iterate-through-a-hashmap。值是数组,因此,当您在其中一个数组中找到您的姓名时,将键作为字符串返回:key.toString()。
  • 我知道您这样做是为了完成家庭作业。当您开始处理自己的项目时,您可以使用“multimap”存储此类数据(其中一个键可能映射到多个值)。 Guava 提供了一些nice implementations.

标签: java arrays hashmap key


【解决方案1】:

遍历 PrizeWinner 键(年)。对于每一年,获取获胜者字符串数组并将其转换为列表,然后调用 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;
}

【讨论】:

  • 谢谢,这很好用。但是,我的班级还没有使用 Arrays 实用程序。虽然,检查它,它非常巧妙地解决了我的很多问题。
猜你喜欢
  • 2010-11-25
  • 2016-03-08
  • 2014-12-03
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 2016-03-09
  • 1970-01-01
相关资源
最近更新 更多