java tree列表关键字检索

java tree列表关键字检索

如上图所示,想要检索包含a的文件及文件夹。

1、创建一个文件类。

import lombok.Data;

import java.io.Serializable;

import java.util.List;

/**

* @Author zyh

* @Date 2020/10/19 15:34

*/

@Data

public class FileDTO implements Serializable {

private Long id;

private String name;

private Integer type;

private String fullPath;

private Long pid;

private List children;

private Integer hasChild;

public FileDTO(Long id,String name,Integer type, String fullPath,Long pid,Integer hasChild){

this.id=id;

this.name=name;

this.type=type;

this.fullPath=fullPath;

this.pid=pid;

this.hasChild=hasChild;

}

}

2、开始处理

import com.google.gson.Gson;

import lombok.extern.slf4j.Slf4j;

import org.springframework.util.StringUtils;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import java.util.Objects;

/**

* @Author zyh

* @Date 2020/10/19 15:36

*/

@Slf4j

public class Test {

//原始数据

private static List queryData=new ArrayList<>();

//返回数据

private static List returnData=new ArrayList<>();

private static Gson gson=new Gson();

//关键字

private static String keywords="a";

public static void main(String[] args) {

//顶级目录

dingji(returnData);

//递归补全子孙

digui(returnData);

//删除不包含的枝蔓

if(!StringUtils.isEmpty(keywords)){

del(returnData);

//将不符合条件,子目录又为空的删除掉

delSonNull(returnData);

}

log.info(gson.toJson(returnData));

}

private static void delSonNull(List list) {

Iterator iterator = list.iterator();

while(iterator.hasNext()){

FileDTO fileDTO = iterator.next();

String name = fileDTO.getName();

List children = fileDTO.getChildren();

if(!name.contains(keywords)){

if(Objects.isNull(children)||children.size()==0){

iterator.remove();

}else{

delSonNull(fileDTO.getChildren());

}

}

}

}

private static void del(List list){

Iterator iterator = list.iterator();

while(iterator.hasNext()){

FileDTO fileDTO = iterator.next();

String name = fileDTO.getName();

if(!name.contains(keywords)){

if(fileDTO.getHasChild()==2){

iterator.remove();

}else{

List children = fileDTO.getChildren();

if(Objects.nonNull(children)&&children.size()>0){

del(fileDTO.getChildren());

}

}

}

}

}

private static void dingji(List list){

queryData.forEach(s->{

if(s.getPid()==0L){

list.add(s);

}

});

}

private static void digui(List list) {

list.forEach(s->{

Long id = s.getId();

if(s.getHasChild()==1){

List children=getChildren(id);

s.setChildren(children);

digui(children);

}

});

}

private static List getChildren(Long pid){

List children=new ArrayList<>();

queryData.forEach(q->{

if(pid.longValue()==q.getPid().longValue()){

children.add(q);

}

});

return children;

}

static{

FileDTO fileDTO1=new FileDTO(1L,"c",2,",1,",0L,1);

FileDTO fileDTO2=new FileDTO(2L,"a.xls",1,",1,2,",1L,2);

FileDTO fileDTO3=new FileDTO(3L,"1016翻译.xlsx",1,",1,3,",1L,2);

FileDTO fileDTO4=new FileDTO(4L,"b",2,",1,4,",1L,1);

FileDTO fileDTO5=new FileDTO(5L,"b.xlsx",1,",1,4,5,",4L,2);

FileDTO fileDTO6=new FileDTO(6L,"a",2,",1,6,",1L,2);

FileDTO fileDTO7=new FileDTO(7L,"a.xls",1,",7,",0L,2);

FileDTO fileDTO8=new FileDTO(8L,"a8.xls",1,",1,4,8,",4L,2);

queryData.clear();

queryData.add(fileDTO1);

queryData.add(fileDTO2);

queryData.add(fileDTO3);

queryData.add(fileDTO4);

queryData.add(fileDTO5);

queryData.add(fileDTO6);

queryData.add(fileDTO7);

queryData.add(fileDTO8);

}

}

3、最终数据为

java tree列表关键字检索相关教程

JavaWeb(四)—— 配置tomcat并使用JSP显示数据库中的表格

JavaWeb(四)—— 配置tomcat并使用JSP显示数据库中的表格 此处下载的tomcat版本是8.5.59 附下载连接 https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.59/bin/ 下载后解压到自选目录, 此处使用IDEA配置,新建一个maven的webapp项目,等待下

JavaScript基础-知识点总结

JavaScript基础-知识点总结 1. JavaScript简介 1. 什么是JavaScript? JavaScript 是?种客户端脚本语?(脚本语?是?种轻量级的编程语?)。 JavaScript 通常被直接嵌? HTML ??,由浏览器解释执? JavaScript 是?种解释性语?(就是说,代码执?不进?预编译)。 特

Java递归查询文件下所有的图片,移动到指定文件夹中,分批次建立

Java递归查询文件下所有的图片,移动到指定文件夹中,分批次建立子文件夹 1. 代码实例 将 /Users/shiheng/desktop/测试文件 目录下的图片(包含子文件夹目录下的图片)移动到了 /Users/shiheng/desktop/测试结果 目录下,默认不分批次建立子文件夹, 重名文件

整理相关实现Java的jar注册为系统服务的方法

整理相关实现Java的jar注册为系统服务的方法 在开发运维中,比如现在比较流行的 Spring-Boot 这种微服务,在Windows上面实现打包运行啥的有个控制台窗口,如果不注意关了服务就GG了,这里整理一些相关的Windows上注册Java的Jar为服务的方法等。 下载地址:htt

java对象转map

java对象转map /** * 对象 转 map * @param * @param t * @return */ public static MapString,Object ObjectToMap(Object t){ MapString,Object resultMap = new HashMap(60); try { //动态加载类 Class cls = Class.forName(t.getClass().toString().split(

java实现树形菜单

java实现树形菜单 java实现树形菜单 java实现树形菜单 建立相应的表 SysRegion (部门表) public class SysDept extends BaseEntity{ private static final long serialVersionUID = 1L; /** 部门ID */ private Long deptId; /** 父部门ID */ private Long p

《NEWedge--JAVA》02JDK的安装

《NEWedge--JAVA》02JDK的安装 何为JDK? 首先我们要了解Java语言的开发工具包(JDK)这一名词,其主要包含Java开发工具集和JRE(运行环境 ), 要明白上面具体内容我们就需要先了解下Java运行机制,如图所示: 我们可以很直观的看到一个Java程序的诞生分为两

掌握Android和Java线程原理

掌握Android和Java线程原理 前言 掌握多线程的使用,是程序员进阶必须掌握的技能之一,为什么多线程这么重要?因为多线程能更充分的发挥出cpu的性能,是我们在开发中提高程序性能最重要并且最有效的一种方式。怎么才能掌握多线程的使用? 只有彻底掌握线程的

java多关键字检索_java tree列表关键字检索相关推荐

  1. java finally的作用_java中finally关键字的特点和作用是什么

    java中finally关键字的特点和作用是什么 发布时间:2020-09-08 11:12:01 来源:亿速云 阅读:114 作者:小新 小编给大家分享一下java中finally关键字的特点和作用 ...

  2. java volatile 基本类型_Java中Volatile关键字详解(转)

    一.基本概念 先补充一下概念:Java 内存模型中的可见性.原子性和有序性. 可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉.通常,我们无法确保执行读操作的线程能适时地看到其 ...

  3. java标识符的介绍_Java标识符所有关键字

    Java标识符所有关键字 Java关键字介绍 1. JAVA中一些赋予特定的含义的标识符,用做专门用途的字符串称为关键字. 2. 所有JAVA关键字都是小写英文字母 3. goto和const虽然从未 ...

  4. java 数据库 事务 只读_java – odd SQLException – 无法检索转换只读状态服务器

    我有一个 Quartz作业,每5分钟一次在MySQL数据库中执行一个存储过程,由于某种原因,3个执行中有1个失败,并提供了这个奇怪的异常.我搜索并搜索了这个异常是什么意思,但是我找不到解决方案.这是完 ...

  5. case是java关键字吗_Java关键字

    3. 程序控制语句 1) break 跳出,中断 break 关键字用于提前退出 for.while 或 do 循环,或者在 switch 语句中用来结束 case 块. break 总是退出最深层的 ...

  6. java 主类作用_JAVA 关键字及其作用解释

    3. 程序控制语句 1) break 跳出,中断 break 关键字用于提前退出 for.while 或 do 循环,或者在 switch 语句中用来结束 case 块. break 总是退出最深层的 ...

  7. java 有哪些关键字_JAVA的常用关键字有哪些?

    JAVA的常用关键字有哪些? 发布时间:2020-05-25 21:46:00 来源:亿速云 阅读:133 作者:鸽子 下表是java中经常会用到的关键字: 一:用于定义访问权限修饰符的关键字: 1) ...

  8. java中实现具有传递性吗_Java中volatile关键字详解,jvm内存模型,原子性、可见性、有序性...

    一.Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的. Java内存模型规定了所有的变量都存储在主内存中.每条线程中还有自己的工作内存,线程的工作 ...

  9. java 中关键字_Java中的关键字

    Java中的关键字一共有53个,包含常用的51个关键字和2个保留字 1.   保留字 2个:预留的关键字,即Java中未被使用到的关键字 const 保留字,即预留的关键字 goto 保留字,即预留的 ...

最新文章

  1. 启用CORS实现Ajax跨域请求
  2. 在VMware Workstation上安装Ubuntu 16.04 Server操作系统
  3. 陶哲轩实分析定理17.3.8(三)
  4. templateref html内容,angular之ng-template模板加载
  5. 雾里散步——这次聊聊自已
  6. flash 语法 入门
  7. 送你一份用Electron开发桌面应用的避坑指南【送3本书,含犀牛书】
  8. 一些oj的返回结果:通过结果找错误,debug。
  9. 利用光学流跟踪关键点---30
  10. python pip使用_Python——pip的安装与使用
  11. Android中的Handler总结
  12. Android 旋转木马轮播,jQuery旋转木马式幻灯片轮播特效
  13. 树状数组(搬运自维基百科)
  14. 有效数据包含额外数据_设置数据有效性的一些技巧
  15. ubuntu16.04中安装MESA 17.3.3
  16. ubuntu用virtualbox安装windows
  17. 内存超频时序怎么调_一个傻瓜式内存超频教程
  18. EMC的青青子衿及其它
  19. OPTA 7模式测试说明
  20. LCEDA-国产PCB设计工具

热门文章

  1. 戒烟日志(2017)
  2. HttpServletRequest获取URL
  3. win10电脑发现不了华为share_如何把win10 笔记本和华为手机用huawei share连接起来?...
  4. R语言(6) 双坐标图
  5. 【原创】iPhone7 或 iPhone7 Plus 换铃声 for mac
  6. Prepack详细介绍及微信小程序优化的新思路
  7. java计算机毕业设计线上投保的设计源码+系统+mysql数据库+lw文档+部署
  8. 微服务架构在二手交易平台(转转)中的实践
  9. CPA2021_会计_东奥张志凤_02_会计概述、财务报告目标、会计基本假设和会计基础
  10. [单源最短路]逃离僵尸岛