繁体   English   中英

如何在hashmap b中找不到hashmap a中的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM