[英]Java algorithm go to list that contains lists of lists
我想從列表中獲取所有元素,但此元素也有列表,直到列表為 null (node.getChildNotes() == null)
。
我嘗試了以下方法,但它不是一種可以無限深入的算法。
private List<Layout> createChildList(Node node) {
List<Layout> layouts = new ArrayList<>();
int count = 0;
while (true) {
Node child = node.getChildNodes().item(count);
if(child == null){
break;
}
NodeList children = child.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
child = children.item(i);
Layout layout = new Layout();
layout.setName(child.getNodeName());
layouts.add(layout);
}
count++
}
return layouts;
}
private List<LayoutEntity> createChildList(Node node) {
List<LayoutEntity> layouts = new ArrayList<>();
NodeList nodeList = node.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
Node childNode = nodeList.item(i);
LayoutEntity layout = new LayoutEntity();
layout.setId(getIdByNode(childNode));
layout.setName(childNode.getNodeName());
layouts.add(layout);
if (childNode.hasChildNodes()) {
createChildList(childNode);
}
}
return layouts;
}
我認為使用深度遞歸函數,您可以首先獲取父節點的所有子節點,然后簡單地為每個節點創建一個new Layout
。
private List<Node> createChildList(Node parent) {
List<Node> result = new ArrayList<Node>();
NodeList children = parent.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
result.addAll(createChildList(children.item(i)));
}
return result;
}
在 if 條件之后,您將獲得子節點並有一個 for 循環,您可以在其中檢查所有這些子節點。 我不知道你為什么需要 while(true) 循環。 就這樣放着吧。另外,count變量也沒用。
private List<Layout> createChildList(Node node) {
List<Layout> layouts = new ArrayList<>();
//int count = 0; WHY TO USE THIS USE THIS?
Node child = node.getChildNodes().item(0);
if(child == null){
break;
} else{
NodeList children = child.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
child = children.item(i);
Layout layout = new Layout();
layout.setName(child.getNodeName());
layouts.add(layout);
}
return layouts;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.