【问题标题】:Count how many HashMap entries have a given value计算有多少 HashMap 条目具有给定值
【发布时间】:2012-08-26 21:47:51
【问题描述】:
public final static HashMap<String, Integer> party = new HashMap<String, Integer>();
party.put("Jan",1);
party.put("John",1);
party.put("Brian",1);
party.put("Dave",1);
party.put("David",2);

我怎样才能返回一个多少人有值1

【问题讨论】:

  • 迭代 values 集合并将每个值与 1 进行比较。
  • 它的java,Iterate可以做。也许还有其他方法。
  • @user1621988 如果您对此回答满意,请您接受

标签: java hashmap key


【解决方案1】:

使用 Java 8:

party.values().stream().filter(v -> v == 1).count();

【讨论】:

    【解决方案2】:

    试试这个:

    int counter = 0;
    Iterator it = party.entrySet().iterator();
    while (it.hasNext()) {
      Map.Entry pairs = (Map.Entry)it.next();
      if(pairs.getValue() == 1){
        counter++; 
      }      
    }
    System.out.println("number of 1's: "+counter);
    

    【讨论】:

    • 为什么要修改party 使用Iterator.remove?以后可能需要这些信息。
    • 你究竟是如何通过修改结构避免ConcurrentModificationException的?
    • 我不知道你在说什么:P
    • 现在说真的,它在原始代码示例中,我没想过要移动它。由于 HashMap 迭代器具有“快速失败”属性,如果其下的结构发生变化,它可能会抛出异常。不过,我同意你的观点,我们不应该在这里修改很棒的 party。代码已修改。
    【解决方案3】:

    试试这个库,了解很多这样的按功能分组 http://code.google.com/p/lambdaj/wiki/LambdajFeatures

    HashMap<String, Integer> party = new HashMap<String, Integer>();
        party.put("Jan",1);
        party.put("John",1);
        party.put("Brian",1);
        party.put("Dave",1);
        party.put("David",2);
        List<Integer> list = filter(equalTo(1),party.values());
        System.out.println(list.size());
    

    您可能需要导入这些 maven 依赖项

    <dependency>
          <groupId>com.googlecode.lambdaj</groupId>
         <artifactId>lambdaj</artifactId>
        <version>2.3.3</version>
    

    的 hamcrest 匹配器
    equalTo(1)
    

    【讨论】:

      【解决方案4】:

      我只是对 HashMap 值使用 Collections.frequency() 方法,就像这样。

      int count = Collections.frequency(party.values(), 1);
      System.out.println(count);
      ===> 4
      

      或者一般的解决方案,生成频率与数字的映射。

      Map<Integer, Integer> counts = new HashMap<Integer, Integer>();
      for (Integer c : party.values()) {
          int value = counts.get(c) == null ? 0 : counts.get(c);
          counts.put(c, value + 1);
      }
      System.out.println(counts);
      ==> {1=4, 2=1}
      

      【讨论】:

        【解决方案5】:

        你可以用这个

        HashMap<String, Integer> party = new HashMap<String, Integer>();
        party.put("Jan",1);
        party.put("John",1);
        party.put("Brian",1);
        party.put("Dave",1);
        party.put("David",2);
        
        Set<Entry<String, Integer>> set = party.entrySet();
        for (Entry<String, Integer> me : set) {
            if(me.getValue()==1)
            System.out.println(me.getKey() + " : " + me.getValue());
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-19
          • 2023-03-22
          • 1970-01-01
          相关资源
          最近更新 更多