Java中的地图和列表

时间:2012-07-05 06:27:09

标签: java list maps

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中,而不是替换它。

3 个答案:

答案 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)

flistgovdepmapdepList的初始化移到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);
      }
    }