查询树形目录(内存遍历成树返回)

实体

java 复制代码
@Data
@TableName("dtp_sm_servicetype")
@ApiModel(value = "SmServicetype对象", description = "服务类型")
@EqualsAndHashCode(callSuper = true)
public class SmServicetype extends BaseEntity {

	@ApiModelProperty("服务类型名称")
	private String name;
	@ApiModelProperty("服务标题")
	private String title;
	@ApiModelProperty("服务分类描述")
	private String descinfo;
	@ApiModelProperty("服务分类父节点编号")
	private Long parentId;
	@ApiModelProperty("排序")
	private Integer orderIndex;

	// 存储下(子)级节点信息
	@TableField(exist = false)
	private List<SmServicetype> childrenList;
}

调用

java 复制代码
/**
 * 服务类型 分页
 */
@ApiOperation(value = "查询所有服务类型", notes = "传入smServicetype")
public R<List<SmServicetypeVO>> serviceTypeTree(SmServicetype smServicetype) {
	//查询所有树数据list
	List<SmServicetype> allList = smServicetypeService.list();
	// 内存中递归成树
	List<SmServicetype> typeTreeList = this.selectSmServicetypeTrees(allList);
	return R.data(SmServicetypeWrapper.build().listVO(typeTreeList));
}

private List<SmServicetype> selectSmServicetypeTrees(List<SmServicetype> smServicetypeList) {
	List<SmServicetype> collect = smServicetypeList.stream()
		.filter(item -> item.getParentId() == -1)   //ParentId=-1的节点为根节点(根据具体情况修改)    filter为过滤不符合条件的
		.map(item -> {
			item.setChildrenList(getChildrenList(item, smServicetypeList));
			return item;
		})
		.collect(Collectors.toList());
	return collect.size() == 0 ? smServicetypeList : collect;

}

private List<SmServicetype> getChildrenList(SmServicetype smServicetype, List<SmServicetype> smServicetypeList) {
	List<SmServicetype> collect = smServicetypeList.stream()
		.filter(item -> item.getParentId().equals(smServicetype.getId()))
		.map(item -> {
			item.setChildrenList(getChildrenList(item, smServicetypeList));
			return item;
		})
		.collect(Collectors.toList());
	return collect;
}

相关推荐
胡子发芽几秒前
面试题:请解释Java中的垃圾回收机制(Garbage Collection, GC),并讨论不同的垃圾回收算法及其优缺点
java·jvm
下雨天u9 分钟前
maven dependencyManagement标签作用
java·数据库·maven
顾子茵30 分钟前
c++从入门到精通(四)--动态内存,模板与泛型编程
java·开发语言·c++
码农飞哥44 分钟前
互联网大厂Java求职面试实战:Spring Boot到微服务全景解析
java·spring boot·微服务·maven·hibernate·技术栈·面试技巧
IT成长史1 小时前
deepseek梳理java高级开发工程师springboot面试题2
java·spring boot·后端
hello1114-1 小时前
Redis学习打卡-Day2-缓存更新策略、主动更新策略、缓存穿透、缓存雪崩、缓存击穿
java·redis·学习·缓存·javaweb
qq_266348731 小时前
springboot AOP中,通过解析SpEL 表达式动态获取参数值
java·spring boot·后端
极乐谷22 小时前
Maven 项目构建时编译错误问题排查与解决
java·maven
小Mie不吃饭2 小时前
【23种设计模式】分类结构有哪些?
java·设计模式·设计规范
bing_1582 小时前
MQTT 在Spring Boot 中的使用
java·spring boot·后端·mqtt