【问题标题】:How to return keys of a map according to a condition?如何根据条件返回地图的键?
【发布时间】:2014-04-16 10:55:15
【问题描述】:

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

我想要一个方法来返回满足条件的所有键的集合,例如,如果它们的 ID 号以 3 开头。我不知道该怎么做。

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

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

【问题讨论】:

  • 我们很乐意为您提供帮助,但请先向我们展示您迄今为止所做的尝试。

标签: java collections map bluej


【解决方案1】:

这是一个返回集合中所有奇数键的示例。 Lists 和 Sets 是 Collections,就像 ArrayLists 是 Lists 一样。在本例中,您可以将 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 不返回,那是因为您可以在映射中使用相同的值两次,但不能两次使用相同的键。

【讨论】:

  • 感谢您帮助我@immibis。这正是我所需要的!
【解决方案2】:

您可以执行以下操作:

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

【讨论】:

    【解决方案3】:

    在您的情况下(如果地图不是太大),我将获取地图的所有键,然后一一处理以计算我的标准:

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

    【讨论】:

      【解决方案4】:
      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 
                  }
              }  
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-02
        • 2018-04-19
        • 1970-01-01
        • 2023-01-09
        • 1970-01-01
        • 2023-01-24
        • 1970-01-01
        相关资源
        最近更新 更多