JAVA生成树形结构代码

news/2024/6/29 12:11:56

JAVA生成树形结构代码

数据库列
id
parentId
name

替换代码中的实体类

最后调用buildMenuTree(List cates)方法即可生成树形结构!


    /**
     * 判断是否有子节点
     */
    private boolean hasChild(List<FolderDto> list, FolderDto p) {
        return getChildList(list, p).size() > 0 ? true : false;
    }


    private void recursionFn(List<FolderDto> list, FolderDto p) {
        // 得到子节点列表
        List<FolderDto> childList = getChildList(list, p);
        p.setChildren(childList);
        for (FolderDto tChild : childList) {
            if (hasChild(list, tChild)) {
                recursionFn(list, tChild);
            }
        }
    }

    public List<FolderDto> buildMenuTree(List<FolderDto> cates) {
        List<FolderDto> returnList = new ArrayList<FolderDto>();
        List<String> tempList = new ArrayList<String>();
        for (FolderDto cate : cates) {
            tempList.add(cate.getId());
        }
        for (Iterator<FolderDto> iterator = cates.iterator(); iterator.hasNext();) {
            FolderDto cate = (FolderDto) iterator.next();
            // 如果是顶级节点, 遍历该父节点的所有子节点
            if (!tempList.contains(cate.getParenId())) {
                recursionFn(cates, cate);
                returnList.add(cate);
            }
        }
        if (returnList.isEmpty()) {
            returnList = cates;
        }
        return returnList;
    }


    private List<FolderDto> getChildList(List<FolderDto> list, FolderDto p) {
        List<FolderDto> tlist = new ArrayList<FolderDto>();
        Iterator<FolderDto> it = list.iterator();
        while (it.hasNext()) {
            FolderDto n = (FolderDto) it.next();
            if (n.getParenId().equals( p.getId())) {
                tlist.add(n);
            }
        }
        return tlist;
    }

http://www.niftyadmin.cn/n/1974607.html

相关文章

zw版【转发·台湾nvp系列Delphi例程】HALCON SmallestRectangle2

zw版【转发台湾nvp系列Delphi例程】HALCON SmallestRectangle2 procedure TForm1.Button1Click(Sender: TObject);var op : HOperatorSetX; img : HUntypedObjectX; w, h : OleVariant; rg : HUntypedObjectX; r1, r2 : OleVariant; c1, c2 : OleVariant;begin op : CoHOperato…

JavaScript语法糖的简析

前言 学习JS中函数的时候,看到了原型链的内容,不理解,查资料,发现了语法糖的定义. 首先说明一下语法糖的定义百度百科上的定义: 语法糖&#xff08;Syntactic sugar&#xff09;&#xff0c;也译为糖衣语法&#xff0c;是由英国计算机科学家彼得约翰兰达&#xff08;Peter J. …

Shell Step by Step (3) —— Stdin amp; if

4.输入输出 #! /bin/bash # Read users input and then get his name read -p "Please input your first name: " firstName read -p "Please input your last name: " lastName echo -e "Your full name is: $firstName $lastName" read使用…

nginx搭建文件服务器

nginx搭建文件服务器 安装&#xff1a; sudo apt-get install nginx 启动&#xff1a; nginx -c /etc/nginx/nginx.conf 或&#xff1a; /etc/init.d/nginx start 创建server文件夹&#xff0c;将server.conf文件放在此文件夹中&#xff1a; sudo mkdir/etc/nginx/server ser…

JavaScropt函数

前言 JavaScript 学习的也有一段时间了,好多东西都没有写出来,所以开始将一些简单的知识点总结一下慢慢的积累沉淀吧! 正文 JavaScript函数声明语法: function functionName(parameters){ 需要执行的代码 }Function()构造函数 函数同样可以通过内置的JavaScript 函数构造器…

Aizu 2450 Do use segment tree 树链剖分+线段树

Do use segment tree Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.bnuoj.com/v3/problem_show.php?pid39566Description Given a tree with n (1 ≤ n ≤ 200,000) nodes and a list of q (1 ≤ q ≤ 100,000) queries, process the queries in order and …

centos7安装k8s部署系统

centos7安装k8s部署系统 一、环境准备 标题1、设置唯一的静态ip vi /etc/sysconfig/network-scripts/ifcfg-ens33将 BOOTPROTO 改为static BOOTPROTOstatic ONBOOTyes 添加ip、网关和DNS地址&#xff0c;网关可以通过命令&#xff1a;“netstat -rn” 查看 IPADDR192.168.2…

Hibernate 5.0.2加载hibernate.cfg.xml时mapping不生效

2019独角兽企业重金招聘Python工程师标准>>> //Group类 package com.jingtai;public class Group {private int groupId;private String groupName;public void setGroupId(int id){groupId id;}public int getGroupId(){return groupId;}public void setGroupName…