gpt4 book ai didi

java - 键为字符串、值为包含元素迭代问题的 ArrayList 的 Hashmap

转载 作者:太空宇宙 更新时间:2023-11-04 06:35:50 24 4
gpt4 key购买 nike

我有一个 HashMap,它接受一个字符串作为键,一个元素的 ArrayList 作为值。

我为此编写的逻辑是: 列表 lsChildLine = new ArrayList();

NodeList nlBook = doc.getElementsByTagName("Book");

for(int cnt=0; cnt < nlBook.getLength() ; cnt++){

Element elBook = (Element) nlBook.item(cnt);

Element childLine = Util.getChildElement(elBook , "ChildLine");
Element parentLine = Util.getChildElement(elBook , "ParentLine");

String parentLineNo = parentLine.getAttribute("LineNo");

if(!mapParentAndChildLines.containsKey(parentLineNo)){

lsChildLine.add(childLine);

mapParentAndChildLines.put((parentLineNo), lsChildLine);

}else{

lsChildLine = mapParentAndChildLines.get(parentLineNo);
lsChildLine.add(childLine);

mapParentAndChildLines.put((parentLineNo), lsChildLine);

}

}

现在我必须根据每个键的列表大小执行一些逻辑。

当我循环的 xml 是这样的时,这工作得很好:

    <BookShelf>
<Book Name="ABC">
<ParentLine LineNo="1">
<ChildLine LineNo="2">
</Book>
</BookShelf>

但是当 xml 如下时,这不起作用:

    <BookShelf>
<Book Name="ABC">
<ParentLine LineNo="1">
<ChildLine LineNo="2">
</Book>
<Book Name="ABC">
<ParentLine LineNo="3">
<ChildLine LineNo="4">
</Book>
</BookShelf>

在这种情况下,当第一次迭代循环时,map中不存在lineNo,因此元素ChildLine被添加到列表中。

当第二次迭代循环时,该键也不存在于映射中,因此它进入 If block 。现在列表对象已经具有循环中前一个元素的 ChildLine,并且与新键对应的 childLine 被插入到同一个循环中,结果列表大小变为 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);

}

关于java - 键为字符串、值为包含元素迭代问题的 ArrayList 的 Hashmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25403314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com