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;}@Overridepublic 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;}

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

  1. c++现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度

    题目描述 现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度 输入描述: 输入的第一行表示节点的个数n(1 ≤ n ≤ 1000,节点的编号为0到n-1)组 ...

  2. 小米笔试题 依据父子关系建树

    问题描述: 现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度  输入描述:  输入的第一行表示节点的个数n(1 ≤ n ≤ 1000,节点的编号为0到n- ...

  3. 第十六课、Qt对象间的父子关系------------------狄泰软件学院

    一.Qt对象间的关系 1.Qt对象间可以存在父子关系 (1).每个对象都保存有它所有子对象的指针 (2).每一个对象都有一个指向其父对象的指针 2.当指定Qt对象的父对象时 (1).其父对象会在子对象 ...

  4. java父子表_Java编程:将具有父子关系的数据库表数据转换为树形结构,支持无限层级...

    在平时的开发工作中,经常遇到这样一个场景,在数据库中存储了具有父子关系的数据,需要将这些数据以树形结构的形式在界面上进行展示.本文的目的是提供了一个通用的编程模型,解决将具有父子关系的数据转换成树形结 ...

  5. oracle 的 父子关系,oracle父子关系树递归排序要注意什么?

    数据库中常要处理父子关系的记录,在oracle中可以用查询语句一次把所有的子记录全部取出来.例如下: t1 t11 t111 t1111 t12 t121 t1211 db数据字段如下: task_i ...

  6. Logger对象父子关系

    Logger之间的父子关系 JUL中Logger之间存在父子关系,这种父子关系通过树状结构存储,JUL在初始化时会创建一个顶层RootLogger作为所有Logger父Logger,存储上作为树状结构 ...

  7. SQL Server 2005新特性之使用with关键字解决递归父子关系

    1. 引言 现实项目中经常遇到需要处理递归父子关系的问题,如果把层次关系分开,放在多个表里通过主外键关系联接,最明显的问题就是扩展起来不方便,对于这种情况,一般我们会创建一个使用自连接的表来存放数据. ...

  8. java 父子级json组装不用递归_2020面试阿里Java研发岗题库总结,想虐面试官不能错过的面试宝典...

    前言: 虽然天猫,蚂蚁金,菜鸟都归属阿里旗下,但每个面试官问的问题都不一样,相同点主要在流程方面.面试开始会让自我介绍,主要业务架构和技术架构两部分.业务架构一般不会深究,但要面试官听明白,并且一般面 ...

  9. 类加载器 java委托机制_解析Java虚拟机中类的初始化及加载器的父委托机制

    类的初始化 在初始化阶段,Java虚拟机执行类的初始化语句,为类的静态变量赋予初始值. 在程序中,静态变量的初始化有两种途径: 1.在静态变量的声明处进行初始化: 2.在静态代码块中进行初始化. 没有 ...

最新文章

  1. 微信小程序picker 轮滑1-100的实现
  2. 赠书 | 成为一个多模型思考者,从掌握数据跃迁到拥有智慧
  3. mysql分区方案的研究
  4. hdu 1255(线段树+离散化)
  5. sqlserver 查询中使用Union或Union All
  6. 计算机等级考试机试试题,计算机等级考试二级VFP机试试题18
  7. (45)FPGA面试技能提升篇(Hyperlink接口)
  8. dedecms mysql使用中_dedecms织梦数据库类使用方法$dsql
  9. 【MYSQL快速入门】常用函数:日期函数
  10. Java语言中的----条件循环
  11. linux 安装Java
  12. 软件测试订单测试用例,测试用例 - 进销存软件测试.doc
  13. 清华大学《走进心理学》2021春学堂在线参考答案
  14. 欧拉环游和中国邮递员问题
  15. 视频在线播放,边下边播的一些问题记录
  16. STM32读写ADXL345 中断功能
  17. 手动释放Linux显卡显存
  18. Wireshark如何导出h264码流和h265码流
  19. 干草堆(寒假每日一题 2)
  20. 雷林鹏最人性化访谈:做投资不仅仅是要赚钱,要成为有价值的人

热门文章

  1. prompt set feedback off set define off (转)
  2. 首家中国精品店!英国当代珠宝品牌Stephen Webster入驻北京SKP购物中心
  3. 考进中科院计算所:我的经历和体会
  4. 虹科案例|nanoGUNE应用Onyx系统实现石墨烯电学性质的无损表征
  5. 微信小程序和用网易新闻api实现自己的微信小程序
  6. 如何恢复 Linux 上删除的文件:ext2
  7. 延迟享受,在最好的年纪请不要选择安逸
  8. [No000015D]【李笑来 笔记整理】个人商业模式升级
  9. js 数组从头添加到数组_如何从头开始实现JavaScript数组方法
  10. c语言空字符串不占空间,C语言中,字符串所占内存空间就是字符串有效字符的个数。...