[英]How to display list data in tree structure in Java?
我有一個arrayList,我想以層次結構顯示。
我希望結果看起來像這樣。 如果沒有任何子節點,我希望該項目縮進一個連字符:
User Design
Lectures
Week 1
-Apr 5
-Apr 8
Week 2
-Apr 12
Activities
Personas
Male
-George
Female
-Allison
-Jessica
我正在嘗試使用遞歸方法顯示列表,但未獲得所需的結果。 到目前為止,這是我嘗試過的:
import java.util.*;
class Materials {
public int id;
public String content;
public int pid;
public Materials(int id, String content, int pid) {
this.id = id;
this.content = content;
this.pid = pid;
}
}
public class nestedList {
public static ArrayList<Materials> material;
public static void main(String[] args) {
material = new ArrayList<Materials>();
material.add(new Materials(1,"User Design", 0));
material.add(new Materials(2,"Lectures", 1));
material.add(new Materials(3,"Activities", 1));
material.add(new Materials(4,"Week 1", 2));
material.add(new Materials(5,"Apr 5", 4));
material.add(new Materials(6,"Apr 8", 4));
material.add(new Materials(7,"Week 2", 2));
material.add(new Materials(8,"Apr 12", 7));
material.add(new Materials(9,"Personas", 3));
material.add(new Materials(10,"Male", 9));
material.add(new Materials(11,"Female", 9));
material.add(new Materials(12,"George", 10));
material.add(new Materials(13,"Allison", 11));
material.add(new Materials(14,"Jessica", 11));
displayContent(material);
}
static void displayContent(ArrayList<Materials> materials) {
ArrayList<Materials> childs = new ArrayList<Materials>();
for (Materials material : materials) {
childs = selectChild(material.id);
System.out.println(material.content);
displayContent(childs);
}
}
static ArrayList<Materials> selectChild(int id) {
ArrayList<Materials> list = new ArrayList<Materials>();
for (int i = 0; i < material.size(); i++) {
if(material.get(i).pid == id) {
list.add(material.get(i));
}
}
return list;
}
}
當我運行此代碼時,arrayList中的項目重復太多次。 它最初顯示正確的層次結構,然后開始以隨機變化重復。
誰能指出我正確的方向?
static void displayContent(ArrayList<Materials> materials) {
ArrayList<Materials> childs = new ArrayList<Materials>();
for (Materials material : materials) {
childs = selectChild(material.id);
if(childs.isEmpty()) {
System.out.print(" - ");
}
System.out.println(material.content);
displayContent(childs);
}
}
在打印材料內容之前檢查列表是否為空將為最后一個元素添加-。
對於系統選項卡,您將不得不計算遍歷次數(例如,child of child的child為3)並添加許多選項卡。 這個答案可以幫助您。 感謝杜克林指出。
問題在於,在您第一次調用displayContent
,您正在傳遞整個材料列表。 因此它將這樣做:
Display the entire hierarchy for "User Design"
Display the entire hierarchy for "Lectures"
Display the entire hierarchy for "Activities"
etc.
您真正想做的是在初始調用中僅將根元素傳遞給displayContent
。 所以在你的主要:
ArrayList<Materials> topLevel = selectChild(0);
displayContent(topLevel);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.