首页 > 编程语言 >Java开发笔记13(树的结构修改记录)

Java开发笔记13(树的结构修改记录)

时间:2023-04-17 13:44:27浏览次数:43  
标签:infRelaTree node 13 Java 笔记 param stationCode return NewTreeVo

1.Controller:

/**
* 区域树生成
*/
@GetMapping("/list")
private Result regionTree() {
Station station = getStation(getUser());
String stationCode = station.getStationTelecode();
List<NewTreeVo> tree = stationInfRelaService.regionTree(stationCode);
return Result.ok(tree);
}  

2.Service:

List<NewTreeVo> regionTree(String stationCode);

 

3.Impl:

@Override
public List<NewTreeVo> regionTree(String stationCode) {
List<StationInfRelaTree> allList = stationInfRelaTreeDao.findByStationCode(stationCode);
List<StationInfRelaTree> rootList = allList.stream().filter(s -> s.getParent() == null).collect(Collectors.toList());

Integer rootType = 1;
return rootList.stream()
//转为vo对象
.map(root -> generateNewTreeVo(root, rootType))
//获取子节点
.peek(root -> {
String relaTreeId = root.getUserdata().getRelaTreeId();
int curRootType = Integer.parseInt(root.getUserdata().getType());
root.setItems(getItems(allList, relaTreeId, curRootType));
}).collect(Collectors.toList());
}

/**
* 获取子节点
* @param allList 所有数据集
* @param parentId 父节点
* @param rootType 父节点类型
* @return
*/
private static Set<NewTreeVo> getItems(List<StationInfRelaTree> allList, String parentId, int rootType) {
return allList.stream()
.filter(node -> node.getParent() != null && node.getParent().getRelaTreeId().equals(parentId))
.map(node -> generateNewTreeVo(node, rootType + 1))
.peek(node -> {
String relaTreeId = node.getUserdata().getRelaTreeId();
int curRootType = Integer.parseInt(node.getUserdata().getType());
node.setItems(getItems(allList, relaTreeId, curRootType));
})
.collect(Collectors.toSet());
}

/**
* StationInfRelaTree 转为 NewTreeVo
* @param infRelaTree
* @param type 节点类型
* @return
*/
private static NewTreeVo generateNewTreeVo(StationInfRelaTree infRelaTree, Integer type) {
return NewTreeVo.builder()
.id(infRelaTree.getId())
.text(infRelaTree.getInfName())
.userdata(generateUserData(infRelaTree, type)).build();
}

/**
* 生成NewTreeVo.UserData
* @see NewTreeVo.UserData
* @param infRelaTree
* @param type
* @return
*/
private static NewTreeVo.UserData generateUserData(StationInfRelaTree infRelaTree, Integer type) {
NewTreeVo.UserData userData = new NewTreeVo.UserData();
//属性拷贝
BeanUtils.copyProperties(infRelaTree, userData);
//其他属性赋值
StationInfRelaTree parent = infRelaTree.getParent();
if (parent != null) {
userData.setParent_id(parent.getRelaTreeId());
}else{
userData.setParent_id("1");
}

userData.setType(type.toString());
return userData;
}  

4:Dao:

@Query("select t from StationInfRelaTree t where t.stationCode = :stationCode")
List<StationInfRelaTree> findByStationCode(@Param("stationCode") String stationCode);

 

标签:infRelaTree,node,13,Java,笔记,param,stationCode,return,NewTreeVo
From: https://www.cnblogs.com/sensenh/p/17325588.html

相关文章

  • Java中线程的常用操作-后台线程、自定义线程工厂ThreadFactpry、join加入一个线程、线
    场景Java中Thread类的常用API以及使用示例:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/126596884上面讲了Thread的常用API,下面记录下线程的一些常用操作。注:博客:https://blog.csdn.net/badao_liumang_qizhi实现后台线程后台线程,是指运行时在后台提供的一......
  • 【迭代器设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
    简介迭代器模式(IteratorPattern),是一种结构型设计模式。给数据对象构建一套按顺序访问集合对象元素的方式,而不需要知道数据对象的底层表示。迭代器模式是与集合共存的,我们只要实现一个集合,就需要同时提供这个集合的迭代器,就像Java中的Collection,List、Set、Map等,这些集合都有自......
  • ORB_SLAM3源码阅读笔记(四)
    LoopClosing线程1LoopClosing线程的创建    LoopClsing线程的创建与启动和LocalMapping线程一样,该线程的核心也在于Run()函数,以下对LoopClosing线程进行逐步的分析。创建LoopClosing对象mpLoopClosermpLoopCloser=newLoopClosing(mpAtlas,mpKeyFrameDatabase,......
  • java json 四个格式
    java官方<dependency><groupId>org.json</groupId><artifactId>json</artifactId><version>20220320</version></dependency>codeJSONObjectjsonObject=newJSONObject();jsonObject.put("secretKey......
  • Spring AOP官方文档学习笔记(二)之基于注解的Spring AOP
    1.@Aspect注解(1)@Aspect注解用于声明一个切面类,我们可在该类中来自定义切面,早在Spring之前,AspectJ框架中就已经存在了这么一个注解,而Spring为了提供统一的注解风格,因此采用了和AspectJ框架相同的注解方式,这便是@Aspect注解的由来,换句话说,在Spring想做AOP框架之前,AspectJAOP框......
  • 笔记springboot0410
    1.课程大纲-springboot框架1.什么是Springboot以及Springboot的特点。2.快速搭建springboot项目3.springboot常用的配置文件类型.4.读取springboot配置文件的内容5.多环境配置6.springboot整合数据源。7.springboot整合mybatis.8.springboot整合定时器。2.什么......
  • idea Java json 复制字符串会出现空格的问题
    普通JSON{"secretKey":"2513e9c533c14271a1bc8a52eacecebe","appKey":"19b9257a1f464e93b087af9d12572ce1"}复制idea{\"secretKey\":\"2513e9c533c14271a1bc8a52eacecebe\",\"appKey\":\&......
  • c++笔记——类模板
    类模板的几个简单测试例程几个要点:(1)类模板类型,在实例化时需要显式类型名称(2)已经显式类型后,传入的参数如果不是相应类型,则会发生强制转换(3)在类外定义的成员函数,需要加上模板参数列表和类作用域,且类作用域带类型列表(4)多个参数模板时,可以在函数中使用其中若干个,不用全部都使用。......
  • TK笔记
    1、@Transactional(readOnly=true)代表当前事务只读,不可写;2、Springboot项目开启事务不是必须添加@EnableTransactionManagementhttps://zhuanlan.zhihu.com/p/569159313可以打开org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration已有自动添......
  • java环境变量
    jdk安装路径C:\ProgramFiles\Java\jdk1.6.0_21java_homeC:\ProgramFiles\Java\jdk1.6.0_21classpath.;%JAVA_HOME%lib;%JAVA_HOME%lib\tools.jarPath%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin检查是否安装成功java-version  ant环境的配置配置ant 和 java的环境  ......