如何根据条件返回地图的键?

时间:2014-03-12 10:55:42

标签: java collections map bluej

我正在使用BlueJ学习Java,我创建了一个HashMap (Integer, String)的类,其中包含某人的ID号及其名称。

我想要一个方法来返回满足条件的所有键的集合,例如,如果它们的ID号以3开头。我无法弄清楚如何做到这一点。

然后另一个方法,如果它们满足条件,则返回值的集合,我认为它与前面的方法非常相似。

我知道我需要遍历地图,但我不知道如何编写条件来填充新地图。

4 个答案:

答案 0 :(得分:1)

这是一个返回Collection中所有奇数键的示例。列表和集合是集合,与ArrayLists列表的方式相同。您可以在此示例中将Collection更改为List(甚至是ArrayList),它也可以执行相同的操作。

public Collection<Integer> getOddKeys() {
    // keySet is a method of Map that returns a Set containing all the keys (and no values).
    Collection<Integer> result = new ArrayList<Integer>();
    for(Integer key : map.keySet()) {
        if((key % 2) == 0) // if the key is odd...
            result.add(key); // ... then add it to the result
    }
    return result;
}

您应该可以修改此示例来检查值 - 我不会只是给您那些代码,因为它非常相似,如果您了解此示例的工作方式,则很容易理解

您需要使用values方法,该方法返回值的集合,其方式与keySet返回密钥集合(更具体地说,一组)的方式相同。如果您想知道为什么keySet会返回一个集合并且values没有,那么因为您可以在地图中使用相同的值两次,但您可以&# 39;两次使用相同的密钥。

答案 1 :(得分:0)

您可以执行以下操作:

  • 创建持有人名单
  • 使用map.keySet().iterator();
  • 对您的地图密钥进行迭代
  • 检查密钥是否以3开头,如果是,则将其添加到密钥列表中。
  • 返回键列表。

答案 2 :(得分:0)

在你的情况下(如果地图不是太大),我将获得地图的所有键,然后逐个处理它们以计算我的标准:

Map<Integer, String> myMap=getFromSomeWhere();
for(Integer i : myMap.keySet() {
    String k=String.valueOf(i);
    if(k.startsWith("3")) {
        //do what you want
    }
}

答案 3 :(得分:-1)

public void CountryAbbriviationMap(String input)
{
        map<string ,string> countrymap =new map<string ,string>{'Australia'=>'AUS','Argentina'=>'ARG', 'India'=>'IND'};

        for(string key : countrymap.keySet())
        {
            if(key.startsWithIgnoreCase('A') && input.startsWithIgnoreCase('A'))
            {
                system.debug(key); //TO GET KEYS
                system.debug(countrymap.get(key)); //TO GET VALUES 
            }
        }  
}