我有两个不同的查询结果的哈希图,虽然2个哈希图是不同大小的hashmap,我正在尝试查找hashmap A中不存在的记录,这些记录存在于hashmap B中。
到目前为止我会发布我的代码;我通过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);
答案 0 :(得分:1)
我不确定我理解你的做法。更合适的方法是(伪代码):
For each element in Hashmap A:
If !HashmapB.contains(element):
++Counter;
答案 1 :(得分:1)
逻辑中存在错误。您希望找到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),comparision可以返回false,因为典型的toString返回对象的类和ID。