【问题标题】:Count occurrences in MultiMap计算 MultiMap 中的出现次数
【发布时间】:2014-05-16 00:47:29
【问题描述】:

我有一个具有多个相似值的 MultiMap:

{Entertainment=[5], Food=[2, 2, 2], Products=[11], Health & Beauty=[3]}

如何计算这些键的总数,以便如下计数?

Entertainment = 1
Food = 3
Products = 1
Health & Beauty = 1

数组中的数字是类别id,所以Food出现了3次。

【问题讨论】:

    标签: java guava multimap


    【解决方案1】:

    multimap.get(key).size()multimap.keys().count(key) 应该可以工作。

    Documentation

    【讨论】:

    • 问题在于它会循环所有可用的键,包括大小为 3 的 Food。因此它也会循环 3 次。
    • 哦,你说的是循环遍历键:只需循环遍历 keySet() 而不是遍历 keys() 以获取每个键一次。
    【解决方案2】:

    假设您的地图声明如下:MultiMap<String, Integer> map,您可以执行以下操作:

    for (String key : map.keySet()) {
        int count = map.get(key).size();
    }
    

    【讨论】:

    • 它也将食物计为 3 次。总共是 6 个,而我只想要 4 个(娱乐、食品、产品、健康和美容)
    • 是的,这应该是for (String key : map.keySet())
    【解决方案3】:

    使用asMap(),你可以得到MultimapMap<String, Collection<Integer>>表示,从中很容易直接得到计数,无需多次查找:

    for (Map.Entry<String, Collection<Integer>> entry : multimap.asMap().entrySet()) {
        System.out.println(entry.getKey() + " = " + entry.getValue().size());
    }
    

    注意:要获得Multimap 上的键的Set,您需要调用keySet()不是 keys()(实际上重复键的次数与它的次数一样多)值)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      • 2017-07-15
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多