java - 如何计算 MultiMap 中每个值的出现次数? ( java )

标签 java hashmap guava multimap

我有 Multimap,它包含两个字符串。示例:

1 = [key,car],  
2 = [key,blue],
3 = [key,car]

Multimap 定义(我使用的是 Guava 库):

ListMultimap<Integer, String> map_multi = ArrayListMultimap.create(); 

这就是我在 MultiMap 中设置值的方式:

for (int i = 0; i < list.size(); i++) {
        if (i + 1 < list.size()) {

            multimap.put(i,(String) list.get(i));
            multimap.put(i,(String) list.get(i+1));

        } else if (i + 1 == list.size()) {
        }
    }      

我想计算多重映射中相同值的出现次数。

因此,如果我计算我的多重映射中有多少个值 [key,car](根据我上面给出的示例),结果应该是 2:

  • 出现 [key,car] = 2
  • 出现 [key,blue] = 1

我也尝试用多值 HashMap 实现这个,我用这个来计算它,方式(Storage 是我在对象中存储两个字符串值的类) :

B = Collections.frequency(new ArrayList<Storage>(map.values()), map.get(number));

但我没有得到正确的结果。

最佳答案

您可以通过创建一个以您的多图值作为键并将计数作为值的 map 来实现您想要的:

Map<Collection<String>, Long> result = map_multi.asMap().values().stream()
    .collect(Collectors.groupingBy(v -> v, Collectors.counting()));

这里我使用了 Guava 的 Multimap.asMap方法获取原始多 map 的 View ,然后将值收集到新 map 中。

另一种方式,没有流:

Map<Collection<String>, Integer> result = new HashMap<>();
map_multi.asMap().values().forEach(v -> result.merge(v, 1, Integer::sum));

这使用了 Map.merge通过计算其出现次数来累积相等值的方法。

关于java - 如何计算 MultiMap 中每个值的出现次数? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48280361/

相关文章:

java.lang.RuntimeException : Found conflicting getters for name isImportantForAccessibility on class androidx. appcompat.widget.AppCompatImageView

java - 我应该使用哪种数据结构来存储 Java 方法的 UML 参数?

java - Google Guava 库的 junit 测试在哪里?

java - 如果使用来自 Guava 的 com.google.common,为什么不应该使用 Objects.requireNonNull()?

java - 如何访问 res/raw 文件夹或 android 中任何其他位置的文件?

java - 读取文件并根据多个条件剪切每一行

java - 如何检测docker容器是否崩溃

java - Android - 我如何检测 Android 将进入屏幕锁定模式,我需要在该阶段完成一项工作

C - 尝试制作哈希表时出错

java - 生成不同集合的组合