如何在Java中以树状结构显示列表数据? [英] How to display list data in tree structure in Java?

查看:773
本文介绍了如何在Java中以树状结构显示列表数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个arrayList,我想以层次结构显示.

I have an arrayList and I want to display in a hierarchal structure.

我希望结果看起来像这样.如果没有任何子节点,我希望该项目缩进一个连字符:

I want the results to look like this. If it doesn't have any child nodes I want the item indented with a hyphen:

User Design
    Lectures
        Week 1
            -Apr 5
            -Apr 8
        Week 2
            -Apr 12
    Activities
        Personas
            Male
                -George
            Female
                -Allison
                -Jessica

我正在尝试使用递归方法显示列表,但未获得所需的结果.到目前为止,这是我尝试过的:

I am trying to display the list using a recursive method but not getting the desired results. This is what I've tried so far:

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中的项目重复太多次.它最初显示正确的层次结构,然后开始以随机变化重复.

When I run this code the items in the arrayList repeats too many times. It initially displays the correct hierarchal structure and then starts to repeat with random variations.

有人能指出我正确的方向吗?

Can anyone please point me in the right direction?

推荐答案

问题是,在您第一次调用displayContent时,您正在传递整个材料列表.因此,它将执行此操作:

The problem is that in your first call to displayContent, you're passing the entire list of materials. So it's going to do this:

Display the entire hierarchy for "User Design"
Display the entire hierarchy for "Lectures"
Display the entire hierarchy for "Activities"
etc.

您真正想做的是在初始调用中仅将根元素传递给displayContent.所以在您的主要内容中:

What you really want to do is pass only the root element to displayContent in your initial call. So in your main:

ArrayList<Materials> topLevel = selectChild(0);
displayContent(topLevel);

这篇关于如何在Java中以树状结构显示列表数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆