NodeList nList2 = doc.getElementsByTagName("dep");
Map<String, List<Map<String, String>>> depMap = new HashMap<String, List<Map<String, String>>>();
for (int temp = 0; temp < nList2.getLength(); temp++) {
Element el = (Element)nList2.item(temp);
String type=el.getAttribute("type");
Node nNode = nList2.item(temp);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
List<Map<String,String>> depList = new ArrayList<Map<String,String>>();
String governor = getTagValue("governor", eElement);
String dependent = getTagValue("dependent", eElement);
Map<String, String> govdepmap = new HashMap<String, String>();
govdepmap.put(governor, dependent);
depList.add(govdepmap);
List<Map<String,String>> flist = new ArrayList<Map<String,String>>();
flist.add(govdepmap);
depMap.put(type, flist);
}
}
我编写了这段代码,但问题是无论何时循环运行,它都会替换已经存储在depMap中的List。我希望它应该将新的Map附加到从depMap检索到的List中,而不是替换它。
答案 0 :(得分:3)
所以不是在每次迭代中创建新列表,而是需要从地图和add()
项目到列表中获取列表
更改
List<Map<String,String>> flist = new ArrayList<Map<String,String>>();
到
List<Map<String,String>> flist = depMap.get(type);
if(flist == null){
List<Map<String,String>> flist = new ArrayList<Map<String,String>>();
}
答案 1 :(得分:0)
将flist
,govdepmap
和depList
的初始化移到for循环之外。
答案 2 :(得分:0)
只需将代码更改为以下代码即可。
NodeList nList2 = doc.getElementsByTagName("dep");
Map<String, List<Map<String, String>>> depMap = new HashMap<String, List<Map<String, String>>>();
List<Map<String,String>> flist = null;
for (int temp = 0; temp < nList2.getLength(); temp++) {
Element el = (Element)nList2.item(temp);
String type=el.getAttribute("type");
Node nNode = nList2.item(temp);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
List<Map<String,String>> depList = new ArrayList<Map<String,String>>();
String governor = getTagValue("governor", eElement);
String dependent = getTagValue("dependent", eElement);
Map<String, String> govdepmap = new HashMap<String, String>();
govdepmap.put(governor, dependent);
depList.add(govdepmap);
if(flist == null){
flist = new ArrayList<Map<String,String>>();
}
flist.add(govdepmap);
depMap.put(type, depList);
}
}