java list 转树 tree 的三种写法

Java中平铺列表(List)与树形(Tree)结构的互转 至此,递归和非递归分别实现listtotree和treetolist已完成,实现比较仓促,有很多细节处未处理好,希望看到的小伙伴及时指出,不胜感激。另外,机智的你,有其它更好的方法,实现转换吗?欢迎留言分享,码海无涯,共同进步。httpshttps。... 阅读详情
package com.lzk;

import java.util.List;

public class TreeNode {
    private String id;

    private String name;

    private String pid;

    private List<TreeNode> childrens;

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

    public String getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getPid() {
        return pid;
    }

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

    public List<TreeNode> getChildrens() {
        return childrens;
    }

    public void setChildrens(List<TreeNode> childrens) {
        this.childrens = childrens;
    }

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

package com.lzk;

import java.util.ArrayList;
import java.util.List;

public class TreeBuild {

    /**
     * 方式一:使用两层循环实现
     * @param treeList
     * @return
     */
    public static List<TreeNode> toTree01(List<TreeNode> treeList,String pid) {
        List<TreeNode> retList = new ArrayList<TreeNode>();
        for (TreeNode parent : treeList) {
            if (pid.equals(parent.getPid())) {
                retList.add(parent);
            }
            for (TreeNode child : treeList) {
                if (child.getPid() == parent.getId()) {
                    if (parent.getChildrens() == null) {
                        parent.setChildrens(new ArrayList<TreeNode>());
                    }
                    parent.getChildrens().add(child);
                }
            }
        }
        return retList;
    }

    /**
     * 方式二:使用递归实现
     * @param treeList
     * @return
    **/
    public static List<TreeNode> toTree02(List<TreeNode> treeList,String pid) {
        List<TreeNode> retList = new ArrayList<TreeNode>();
        for (TreeNode parent : treeList) {
            if (pid.equals(parent.getPid())) {
                retList.add(findChildren(parent, treeList));
            }
        }
        return retList;
    }

    /*
    * 查询父节点下的所有子节点
    * */
    private static TreeNode findChildren(TreeNode parent, List<TreeNode> treeList) {
        for (TreeNode child : treeList) {
            if (parent.getId().equals(child.getPid())) {
                if (parent.getChildrens() == null) {
                    parent.setChildrens(new ArrayList<TreeNode>());
                }
                parent.getChildrens().add(findChildren(child, treeList));
            }
        }
        return parent;
    }

    /**
     *方法三
     * @param list
     * @return
     */
    public static List<TreeNode> toTree03(List<TreeNode> list,String pid) {
        List<TreeNode> treeList = new ArrayList<TreeNode>();
        for (TreeNode tree : list) {
            if(tree.getPid().equals(pid)){
                treeList.add(tree);
            }
        }
        for (TreeNode tree : list) {
            toTreeChildren(treeList,tree);
        }
        return treeList;
    }

    public static void toTreeChildren(List<TreeNode> treeList, TreeNode tree) {
        for (TreeNode node : treeList) {
            if(tree.getPid() == node.getId()){
                if(node.getChildrens() == null){
                    node.setChildrens(new ArrayList<TreeNode>());
                }
                node.getChildrens().add(tree);
            }
            if(node.getChildrens() != null){
                toTreeChildren(node.getChildrens(),tree);
            }
        }
    }
}

package com.lzk;

import java.util.ArrayList;
import java.util.List;

public class test {
    public static void main(String[] args) {
        List<TreeNode> list = new ArrayList<TreeNode>();
        list.add(new TreeNode("1", "顶层节点1", "0"));
        list.add(new TreeNode("2", "顶层节点2", "0"));
        list.add(new TreeNode("3", "顶层节点3", "0"));
        list.add(new TreeNode("4", "二级节点4", "1"));
        list.add(new TreeNode("5", "二级节点5", "2"));
        list.add(new TreeNode("6", "二级节点6", "3"));
        list.add(new TreeNode("7", "三级节点7", "4"));
        list.add(new TreeNode("8", "三级节点8", "4"));
        list.add(new TreeNode("9", "三级节点9", "5"));
//        List<TreeNode> list1 = TreeBuild.toTree02(list,"0");
//        System.out.println(list1);
        List<TreeNode> list2 = TreeBuild.toTree03(list,"0");
        System.out.println(list2);
    }
}

Java:List转换为Tree的两种算法 Java:List转换为Tree的两种算法 一、节点接口  采用接口以适配多种具有嵌套结构的数据类型 /* * 节点接口: * E:接口的实现类类型 * T:id的类型 * */ public interface TreeNode<E,T> { // 此节点的Id T getId(); // 此节点的父节点Id T getPId(); // 设置此节点的子节点列表 void setChildren(List<E> treeNod 阅读详情

相关推荐

java树三级结构代码

java树结构,分3级节点逐级显示,还可以响应点击事件,亲测可以使用,代码有注释,若有疑问可以给我留言

java中把一个list转tree的三种方法——工具类

使用递归,双重for循环,map三种方式将普通lsit转换为tree结构

qq_46258463的博客 4611

java将list转为树形结构的方法(后台和前台)

前台: function listToTree(myId,pId,list){ function exists(list, parentId){ for(var i=0; i<list.length; i++){ if (list[i][myId] == parentId) return true; } return false;

java中把一个list转tree的三种方法

说到java把list转tree,网上有一大堆文章,但是我看过之后发现基本都只说了递归和两层嵌套循环两种方法,没人提到两次遍历的方法,我今天就把三种方法都实现以下,做一下对比

shj 1万+

基于因果推理的LLM去毒:精准定位注意力头实现高效干预

在大型语言模型(LLM)的部署与应用中,模型安全与可控性是核心挑战之一。传统方法如全参数微调成本高昂,且可能损害模型通用能力。本文聚焦于一种基于因果推理的精准干预技术,其原理在于利用因果发现算法定位Transformer模型中与“毒性”输出存在强因果关联的特定注意力头。该技术通过分析注意力头的激活模式与生成文本毒性分数之间的因果关系,识别出关键责任单元,而非依赖传统的相关性分析。其技术价值在于实现了轻量级、高可解释性的模型行为修正,能以极低的参数改动代价有效降低模型在敏感话题上的有害输出。在应用场景上,该方

weixin_32667439的博客 313

Keil中搭建自动化单元测试框架Unity

前言:   虽然一些C++的自动化单元测试框架也能用来C语言单元测试,但那样我们编写C语言程序时需要符合C++的标准,这样有一些C的特性是无法使用的,限制C的特性使用不太好,于是找了一个全部用C实现的自动化测试框架。Unity是一个简单且直接的自动化单元测试框架,它由很少的几个文件构成。 搭建环境:   1.从github上下载最新版本的Unity源码,下载链接:https://github...

程序员的自我修炼 3900

Java中List转Tree、List转化深林树、Tree转List

一、简介 在我们业务需求中,有些业务要实现List转化Tree或Tree转化List,如:菜单权限、产品分类、数字字典等等! 举个栗子 业务需求:我们菜单权限需要树形化显示菜单层级关系 表结构如下 CREATE TABLE "sys_permission" ( "id" bigint(20) NOT NULL AUTO_INCREMENT, "pid" bigint(20) DEFAULT NULL COMMENT '父级权限id', "name" varchar...

给自己一个smile 1914

智能车竞赛环岛处理全解析:从图像识别到状态机控制

在嵌入式系统与自动控制领域,状态机是管理复杂系统行为、实现清晰逻辑流的核心设计模式。其原理在于定义一组有限的状态,以及触发状态迁移的事件和条件,从而将连续、模糊的过程分解为离散、确定的阶段。这种技术在机器人导航、工业自动化等场景中价值显著,尤其适用于需要应对多种场景、做出序列化决策的场合。在智能车竞赛中,赛道元素识别与路径跟踪是典型应用,其中环岛作为连续闭环的复杂场景,对系统的鲁棒性和决策连贯性提出了更高要求。通过图像处理提取赛道边线、宽度和曲率等特征,结合陀螺仪等传感器数据,可以构建一个专门处理环岛的状态

weixin_34033624的博客 561

list 转树 tree 的三种写法

@Data public class TreeNode { private Integer id; private Integer pid; private String name; private List<TreeNode> children; public TreeNode(Integer id, Integer pid, String...

qq_35854212的博客 707

2020.12.25丨CRISPResso2安装教程

一个月前接到一个项目,说是做关于CRISPR的编辑效率个性化分析。本来这个分析以前是没有做过的,不过客户发了参考文献。里面流程和命令行都非常清楚,再加上读研期间CRISPR的项目“中道崩殂”,让我对CRiSPR的技术有些执念,便下决心接下来试试。 整个测序分析使用的工具就是CRISPResso,,下面介绍最快捷的安装方式。 首先,CRISPResso只支持python2.X,不支持3.X你需要下载Anaconda或者miniconda,以Miniconda为例: 安装环境: Linux 64-bi

4634

Android 蓝牙——概述(一)

Profiles (蓝牙应用规范),它从应用场景的角度为蓝牙技术的使用制定了不同的规范。这也是和大众日常生活接触最多的一部分。蓝牙支持很多Profiles:MAP:(MessageAccessProfile),短信访问协议,允许设备间的信息交换,短信。使用场景:智能车载中同步短信等信息。HFP:(Hands-free Profile),电话免提协议,让蓝牙设备(如蓝牙耳机/车机)可以控制电话,如接听、挂断、拒接等。

小旭的专栏 3492

java高效率list转tree

高效率list转tree

u010786467的博客 2796

【ComfyUI】Wan2.2 Animate 动作迁移重绘视频生成

本文介绍了一个基于ComfyUI的Wan2.2 Animate视频生成工作流,通过动作迁移和视频重绘技术实现高质量视频创作。该系统融合视频帧重建、动作迁移、图像重绘和音频合成等多种AI技术,核心采用Wan2.2 Animate 14B_fp8模型配合专属VAE解码器和LoRA微调模块。工作流程包含输入预处理、模型加载、特征提取、动作采样生成、解码输出和资源清理六个阶段,通过WanVideo系列节点实现从图像/视频输入到最终视频输出的完整处理。系统支持对参考图像进行视觉特征提取和嵌入生成,结合文本/动作嵌入进

Mr数据杨 2449

Java实现树数据Tree与List互转并逐级汇总节点的值(支持树节点多列统计)

主要需求:a.实现树Tree与List互转 b.Tree实现多列统计数据汇总。前度采用MiniUI。 逐级汇总数据:找到最小节点,然后回溯其所有父节点,注意值的重复计算问题。 构造一棵树的基本节点: package com.example.demo.tree; import java.util.ArrayList; import java.util.List; /** *...

纸上得来终觉浅,绝知此事要躬行 8428

华为OD机试 - 服务中心选址(Python)

一个快递公司希望在一条街道建立新的服务中心。公司统计了该街道中所有区域在地图上的位置,并希望能够以此为依据为新的服务中心选址:使服务中心到所有区域的距离的总和最小。先输入区域数组positions的长度n(1 ≤ n ≤ 10^5)接下来 n 行每行输入成对的left和right值,以空格隔开。输出为location。

m0_46181452的博客 282

YOLOv11改进策略【注意力机制篇】| SE、CBAM、ECA、CA、Swin Transformer等注意力机制全面解析与应用

本文详细介绍了五种主流的注意力机制及其在YOLOv11中的应用。通过合理的模块选择和位置部署,注意力机制能够显著提升目标检测性能。

QQ_778132974的博客 876

java list转tree_list转tree和list中查找某节点下的所有数据操作

类的实例化顺序父类静态变量、 父类静态代码块、 子类静态变量、 子类静态代码块、父类非静态变量(父类实例成员变量)、 父类构造函数、 子类非静态变量(子类实例成员变量)、 子类构造函数。已知组织类Org{String id,String name,String parentId},现在一List中存放无序的Org数据,求一个组织id下的所有组织。public static List childLi...

weixin_28686771的博客 609

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java list转tree_普通list和树状list互转

importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjava.util.stream.Collectors;importorg.apache.commons.collections4.CollectionUtils;public classTreeUtils {/*** 普通list转树状list*@pa...

weixin_33838896的博客 920

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java list 转树 tree

在做目录树的时候通常是将一个目录存在数据库的List全部返回来,再根据节点id和parentId组装成一颗树。 List转成Tree有两种方式,一种是常用的递归,一种是双层循环。(建议递归) package com.gysoft.utils.tree; import lombok.Data; import lombok.ToString; import java.util.List...

weixin_41905537的博客 512

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

java中 list转tree

public class TkMenuDO { private Integer menuId; private Integer fatherMenuId; private String menuAddress; private String menuRemark; private List<TkMenuDO> children; // 这里忽略了 get、set方法 } import java.util.ArrayList; import java.util.Lis...

belialxing的专栏 473

java中实现list转tree的两种方式

Java中将List转为树形的方法使用改变的方式方式一:递归方式二:stream实体类 使用改变的方式 方式一:递归 public static void main(String[] args) { List<Zone> zones = listWithTree1(); System.out.println(zones); } public static List<Zone> listWithTree1() { List&l

xinhe96的博客 3307

java list转tree_程序员:java中把一个list转tree有哪几种方法,推荐三种方法

说到java把list转tree,网上有一大堆文章,但是我看过之后发现基本都只说了递归和两层嵌套循环两种方法,没人提到两次遍历的方法,我今天就把三种方法都实现以下,做一下对比问题周二面试中,面试官提了一个问题,当时答得不是特别好,手写代码能力还是不行啊,一个是比较紧张,一个是代码没法调试,写递归的时候给自己绕晕了。下面是问题:我们有个需求,数据库要存一个无限级联的tree,比如菜单,或者地区等数据...

weixin_30737081的博客 471

Java list转tree,tree转list(递归实现)

下班回家途中的风景。生活不止眼前的苟且,还有到不了的远方和看不见的风景。 实现简易的留言板,list转换成树,树转出成list。 表结构如下 根据不同的场景设计表结构,如果像微信公众号留言那种,可以添加一个文章id。 表中的留言信息 controller层 /** * * @author shiyi * @since 2020-07-16 */ @RestController @RequestMapping("/message") public class MessageControlle.

失忆老幺 7891

list 生成tree java_【Java工具类】List转Tree通用工具类

一、背景最近的开发工作用到“树”模型比较多,例如节点树、权限树等。每一个实体都有自己特殊的字段,所以最初的解决方法是给每一个实体写独特的转换方法。然后需要转换为树的实体变多,代码就会冗余,因此写一个工具类,提供对应的方法将常见的List转换为Tree。二、实现1.效果UI框架:layui(官方文档:https://www.layui.com/doc/)在使用layui的过程中发现,目前layui的...

weixin_39959369的博客 767
上一篇: 清除浮动的两种方式
下一篇: 读取properties配置文件的方法
多年以后1234
博客等级 码龄10年 25粉丝 32原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值