![](/img/trans.png)
[英]How can I find the highest value of only certain entires in my HashMap rather than the entire HashMap?
[英]How can I find if value in hashmap a does not exist in hashmap b
我有两个不同的查询结果的哈希图,虽然2个哈希图是不同大小的hashmap,我正在尝试查找hashmap A中不存在的记录。
到目前为止我会发布我的代码; 我通过sql进行了比较,得到了我想要的结果,但是当我试图把它放在代码中时,我没有成功。 我希望你能指出我正确的方向。 提前致谢
HashMap<Integer, HashMap<String, Object>> mapA = new HashMap<>();
HashMap<Integer, HashMap<String, Object>> mapB = new HashMap<>();
int m=0;
for (int j = 0; j < mapA.size(); j++) {
for (int k = 0; k < mapB.size(); k++) {
if (!mapA.get(j).get("folio").toString().equals(
mapB.get(k).get("folio").toString())) {
m++; // count many records not exist on mapB
}
}
}
System.out.println(m);
我不确定我理解你的方法。 更合适的方法是(在伪代码中):
For each element in Hashmap A:
If !HashmapB.contains(element):
++Counter;
逻辑中存在错误。 您希望找到A记录中不存在,但每次迭代HashMaps的值不相等时都会递增计数器(在这种情况下,您将获得更大的m)。 你的代码应该是这样的。
for (int j = 0; j < mapA.size(); j++) {
boolean found=false;
for (int k = 0; k < mapB.size(); k++) {
if (mapA.get(j).get("folio").toString().equals(
mapB.get(k).get("folio").toString())) {
found=true;
break;
}
}
if (!found){
m++; // count many records not exist on mapB
}
}
还有其他可能的错误。 在一般情况下,你不得不在toString方法之后进行比较,而是比较对象(我认为你没有对象的ovverite toString方法返回有效的标识符来比较它们。在大多数情况下,它将不会返回你需要的东西。或者在换句话说,你应该使用ovveride等于散列图中所有可能对象的方法,并使用下一个代码进行比较:
mapA.get(j).get("folio").equals(mapB.get(k).get("folio"))
在你的情况下(使用toString),比较可以返回false,因为典型的toString返回对象的类和ID。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.