我有Map<Integer,Integer>
1 10
2 10
3 20
5 20
6 11
7 22
如何找到地图的最大重复值?在这种情况下 - 即10&amp; 20.两种情况下重复计数均为2。
答案 0 :(得分:7)
不要重新发明方向盘并使用frequency
类的Collections
方法:
public static int frequency(Collection<?> c, Object o)
如果您需要计算所有值的出现次数,请使用Map并巧妙地循环:)
或者使用上面的frequency
方法将值放在Set的每个元素的Set和循环中。 HTH
如果您喜欢使用lambdas的功能更强大的Java 8单行解决方案,请尝试:
Map<Integer, Long> occurrences =
map.values().stream().collect(Collectors.groupingBy(w -> w, Collectors.counting()));
答案 1 :(得分:2)
遍历hashmap,并计算重复次数。
for(Integer value:myMap.values() ){
Integer count = 1;
if(countMap.contains(value)){
count = countMap.get(value);
count++;
}
countMap.put(value, count);
}
然后遍历结果图,找到max(s):
Integer maxValue=0;
for (Map.Entry<Integer, Integer> entry : countMap.entrySet()){
if(entry.getValue => maxValue){
maxValue = entry.getValue;
maxResultList.add(entry.Key);
}
}
答案 2 :(得分:0)
简单的解决方案是你需要编写自己的put方法来获取重复值
重复值
put(String x, int i){
List<Integer> list = map.get(x);
if(list == null){
list = new ArrayList<Integer>();
map.put(x, list);
}
list.add(i);
}
因此,在这种情况下,请映射到[10,10,20,20]
用于重复出现值
您需要将值列表的大小与您设置的值进行比较。
List<T> listOfValues= map.values();
Set<T> listOfSetValues= new HashSet<T>(map.values);
现在你需要检查两个集合的大小;如果不相等,则有重复项,以从地图大小中获取最大重复出现减去列表。
答案 3 :(得分:0)
我们可以使用许多简单的方法来做到这一点。
首先,我们可以定义一个计算元素的方法,并将值从该值返回到其出现次数:
Map<T, Integer> countAll(Collection<T> c){
return c.stream().collect(groupingByConcurrent(k->k, Collectors.counting()));
}
然后,要过滤掉所有具有最少的实例的条目,我们可以这样做:
C maxima(Collection<T> c, Comparator<? super T> comp,
Producer<C extends Collection<? super T> p)){
T max = c.stream().max(comp);
return c.stream().filter(t-> (comp.compare(t,max) >= 0)).collect(p);
}
现在我们可以一起使用它们来获得我们想要的结果:
maxima(countAll(yourMap.valueSet()).entrySet(),
Comparator.comparing(e->e.getValue()), HashSet::new);
请注意,这样会产生HashSet<Entry<Integer,Integer>>
。
答案 4 :(得分:0)
尝试这个简单的方法:
public String getMapKeyWithHighestValue(HashMap<String, Integer> map) {
String keyWithHighestVal = "";
// getting the maximum value in the Hashmap
int maxValueInMap = (Collections.max(map.values()));
//iterate through the map to get the key that corresponds to the maximum value in the Hashmap
for (Map.Entry<String, Integer> entry : map.entrySet()) { // Iterate through hashmap
if (entry.getValue() == maxValueInMap) {
keyWithHighestVal = entry.getKey(); // this is the key which has the max value
}
}
return keyWithHighestVal;
}