Java 键为字符串、值为ArrayList的Hashmap包含元素迭代问题
我有一个HashMap,它以字符串作为键,以元素的ArrayList作为值 我为此编写的逻辑是: List lsChildLine=new ArrayList()Java 键为字符串、值为ArrayList的Hashmap包含元素迭代问题,java,dom,for-loop,arraylist,hashmap,Java,Dom,For Loop,Arraylist,Hashmap,我有一个HashMap,它以字符串作为键,以元素的ArrayList作为值 我为此编写的逻辑是: List lsChildLine=new ArrayList() NodeList nlBook=doc.getElementsByTagName(“Book”); 对于(int cnt=0;cnt
NodeList nlBook=doc.getElementsByTagName(“Book”);
对于(int cnt=0;cnt
现在,我必须根据每个键的列表大小进行一些逻辑
当我是循环使用的xml时,这很好,如下所示:
<BookShelf>
<Book Name="ABC">
<ParentLine LineNo="1">
<ChildLine LineNo="2">
</Book>
</BookShelf>
<BookShelf>
<Book Name="ABC">
<ParentLine LineNo="1">
<ChildLine LineNo="2">
</Book>
<Book Name="ABC">
<ParentLine LineNo="3">
<ChildLine LineNo="4">
</Book>
</BookShelf>
但当xml如下所示时,这不起作用:
<BookShelf>
<Book Name="ABC">
<ParentLine LineNo="1">
<ChildLine LineNo="2">
</Book>
</BookShelf>
<BookShelf>
<Book Name="ABC">
<ParentLine LineNo="1">
<ChildLine LineNo="2">
</Book>
<Book Name="ABC">
<ParentLine LineNo="3">
<ChildLine LineNo="4">
</Book>
</BookShelf>
在这个场景中,当循环第一次被迭代时,lineNo不在映射中,因此元素ChildLine被添加到列表中
当循环第二次迭代时,该键也不在映射中,因此它进入If块。现在列表对象已经具有循环中前一个元素的子行,并且与新键对应的子行被插入到同一个循环中,因此列表大小变为2,而理想情况下它应该是1
我想不出一个合适的逻辑来避免这一点,尽管我觉得这与将列表贴在正确的位置有关
有什么帮助吗 在代码中只创建一个列表,因此所有元素都将添加到此同一列表中。相反,为每个新的
parentLineNo
创建一个新列表
if(!mapParentAndChildLines.containsKey(parentLineNo)){
// Create a new list to add in the map
lsChildLine = new ArrayList();
lsChildLine.add(childLine);
mapParentAndChildLines.put((parentLineNo), lsChildLine);
}else{
lsChildLine = mapParentAndChildLines.get(parentLineNo);
lsChildLine.add(childLine);
// Unnecessary, the list is already in the map
// mapParentAndChildLines.put((parentLineNo), lsChildLine);
}
谢谢你,威尔克……你说得对。。。我以前曾想过这样做,但后来错过了一些计算,我认为这是行不通的。所以就不提了。但非常感谢您提供了简单的解决方案。