【发布时间】:2019-07-28 09:22:19
【问题描述】:
我正在尝试计算 java 8 中哈希图的所有值的 mod 总和。但它没有按预期提供。下面是我写的代码。
private static int FindPairs(int n,int[] ar) {
Map<Integer, Integer> countermap=new HashMap<>();
Iterator<Integer> itr=countermap.keySet().iterator();
int result =0;
for(int i=0;i<ar.length;i++) {
if(countermap.containsKey(ar[i])) {
countermap.put(ar[i], countermap.get(ar[i])+1);
}
else {
countermap.put(ar[i], 1);
}
}
int mod=0;
while(itr.hasNext()) {
System.out.println(itr.next());
mod=itr.next()%2;
result=result + mod;
}
System.out.println(Arrays.asList(countermap));
return result;
}
输入:
ar= {1,2,3,4,5,6,1,3,4,5}
n=7
输出:
[{1=2, 2=1, 3=2, 4=2, 5=2, 6=1}]
0
【问题讨论】:
-
为什么
n从未在任何地方使用过?你能澄清一下你的期望吗? -
n不是在方法中没有使用吗!? -
是的,我在故障排除时使用了 array.length。我正在尝试对给定数组中可能的重复值对进行计数。
-
第一个循环可以写成
for(int value: ar) countermap.marge(value, 1, Integer::sum);,然后是第二个for(int next: countermap.keySet()) { System.out.println(next); result += next % 2; },对于最后的打印语句,不需要将地图包装在一个列表中,System.out.println(countermap);就可以了,除非输出周围的[和]至关重要。 -
sysout 仅用于故障排除目的。另外我想处理值而不是键 keyset() 将从地图返回一组键。基本上我想遍历地图寻找 (value%2) 的 mod 并将其添加到结果变量中
标签: java java-8 hashmap iterator