gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:04:53 24 4
gpt4 key购买 nike

我有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com