我有一个场景,我迭代从查询
获得的结果集中的一组行- > QUERY
System.out.println("---Iterating Events---");
while (rs.next()) {
startOfMethod(rs);
}
startOfMethod(ResultSet result)
{
HashMap hmap;
String applicationGroupMap;
String description;
description = result.getString("description"); //description is an XML string
hmap = new XMLRead().xmlDataOutput(description); //This is a separate class which returns a hashmap
applicationGroupMap = (String) hmap.get("Attribute.applicationGroupMap");
}
问题在于,有时当它从第一行迭代到第二行而第二行没有“Attribute.applicationGroupMap时,它会保留旧值。
有谁能告诉我如何在每次迭代时刷新hmap?
返回Hmap的代码: -
try {
Document doc = convertToDocument(xmlStr);
String hashKey = "";
String hashValue = "";
NodeList listOfKeyValues = doc.getElementsByTagName("k");
for (int s = 0; s < listOfKeyValues.getLength(); s++) {
Node firstNode = listOfKeyValues.item(s);
if (firstNode.getNodeType() == Node.ELEMENT_NODE) {
Element firstElement = (Element) firstNode;
NodeList keyList = firstElement.getChildNodes();
hashKey = ((Node) keyList.item(0)).getNodeValue().trim();
NodeList listOfvalues = doc.getElementsByTagName("v");
Node secondNode = listOfvalues.item(s);
Element valueElement = (Element) secondNode;
NodeList valueList = valueElement.getChildNodes();
if (valueList.getLength() != 0) {
hashValue = ((Node) valueList.item(0)).getNodeValue();
} else {
hashValue = "";
}
hsMap.put(hashKey, hashValue);
}
}
} catch (Throwable t) {
t.printStackTrace();
}
return hsMap;
}
答案 0 :(得分:1)
您的hmap
变量甚至不应该是成员变量,更不用说静态了。它应该是方法本地的,并且该方法应该在每次调用时分配一个新的。
标题的更准确版本是“旧HashMap
保留旧值”。
答案 1 :(得分:0)
根据评论中的对话,您有两种选择:
将hsMap
中XMLRead
的声明更改为
public HashMap hsMap = new HashMap();
(不是static
。制作private
可能更正确,但这与您的问题无关。)
- 或 -
在startOfMethod
做
hmap.clear();
在你得到你想要的东西后清除地图。