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