Java父子关系list转树结构加树的关键字搜索

package mytest;
import java.util.ArrayList;
import java.util.List;

/**
 * @desc
 * @date 2021-05-14 8:59
 */
public class TreeTest {


    /**
     * --档案模板
     * ----会议模板
     * ------议1模板
     * ------议2模板
     * ----公文模板
     * ------公文1模板
     * ------公文2模板
     * @param args
     */
    public static void main(String[] args) {
        List<Category> dataList = new ArrayList<Category>(){{
            add(new Category("1","0","档案模板"));
            add(new Category("2","1","会议模板"));
            add(new Category("3","2","议1模板"));
            add(new Category("4","2","议2模板"));
            add(new Category("5","1","公文模板"));
            add(new Category("6","5","公文1模板"));
            add(new Category("7","5","公文2模板"));
            add(new Category("8","7","公文2-1模板"));
        }};

        List<Category> categories = list2Tree(dataList,"1");
        List<Category> resList= findByName(dataList,"关键字");
        System.out.println(categories);
        System.out.println(resList);

    }

    private static List<Category> list2Tree(List<Category> dataList, String pid) {
        List<Category> resList = new ArrayList<>();
        for (Category category : dataList) {
            if(category.getId().equals(pid)) {
                //说明是根节点
                resList.add(category);
                //找这个节点的孩子
                category.setChildren(getChildrenByid(dataList,category.getId()));
                break;
            }
        }

        return resList;
    }

    //根据pid找到孩子们
    private static List<Category> getChildrenByid(List<Category> dataList, String id) {
        List<Category> childList = new ArrayList<>();
        for (Category category : dataList) {
            if(category.getPid().equals(id)) {
                //找这个节点的孩子们
                category.setChildren(getChildrenByid(dataList,category.getId()));
                childList.add(category);
            }
        }
        return childList;
    }

    //根据关键字搜索,结果
    private static List<Category> findByName(List<Category> dataList,String name){
        for (int i = dataList.size()-1; i >= 0; i--) {
            Category category = dataList.get(i);
            List<Category> children = category.getChildren();
            if (children!=null && children.size()>0){
                findByName(children,name);
            }
            if (!category.getName().contains(name) && children.size() == 0){
                dataList.remove(i);
            }
        }
        return dataList;
    }



}

class Category {
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getPid() {
        return pid;
    }

    public void setPid(String pid) {
        this.pid = pid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Category> getChildren() {
        return children;
    }

    public void setChildren(List<Category> children) {
        this.children = children;
    }

    @Override
    public String toString() {
        return "Category{" +
                "id='" + id + '\'' +
                ", pid='" + pid + '\'' +
                ", name='" + name + '\'' +
                ", children=" + children +
                '}';
    }

    public Category(String id, String pid, String name) {
        this.id = id;
        this.pid = pid;
        this.name = name;
    }

    private String id;
    private String pid;
    private String name;
    private List<Category> children;


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值