JAVA使用hutool工具实现查询树结构数据(省市区)
作者:唐胜伟 发布时间:2021-11-04 18:30:09
标签:java,查询,树结构,数据
下面通过代码看下JAVA查询树结构数据(省市区)使用hutool工具实现
代码:
@PostMapping("/getTree")
public Object getTree() {
// 查询数据
List<LxhpArea> areaList = areaService.list();
// 构建的整个树数据
List<TreeNode<String>> treeNodeList = areaList.stream().map(area -> {
// 扩展字段赋值,下面要取这里的值
Map<String, Object> extraMap = new HashMap<>();
extraMap.put("domain", area.getDomain());
extraMap.put("isOpen", area.getIsOpen());
extraMap.put("bigArea", area.getBigArea());
// 单个树数据构建
TreeNode<String> treeNode = new TreeNode<String>()
.setId(String.valueOf(area.getId())) // 主键
.setParentId(String.valueOf(area.getReid())) // 父节点ID
.setName(area.getName()) // 省份名称
.setWeight(area.getSortOrder()) //权重,排序
.setExtra(extraMap); // 扩展字段
return treeNode;
}).collect(Collectors.toList());
// 配置
TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
// 自定义属性名(修改默认名称)
treeNodeConfig.setWeightKey("sortOrder");
treeNodeConfig.setChildrenKey("childrenNode");
// 最大递归深度
treeNodeConfig.setDeep(1);
//转换器
List<Tree<String>> treeNodes = TreeUtil.build(treeNodeList, "1", treeNodeConfig,
(treeNode, tree) -> {
// 给树节点赋值(还能set 父 或子节点树)
tree.setId(treeNode.getId());
tree.setParentId(treeNode.getParentId());
tree.setWeight(treeNode.getWeight());
tree.setName(treeNode.getName());
// 扩展属性值赋值
// treeNode.getExtra().getOrDefault("domain", null) 是获取上面Map放进去的值,没有就是 null
tree.putExtra("domain", treeNode.getExtra().getOrDefault("domain", null));
tree.putExtra("isOpen", treeNode.getExtra().getOrDefault("isOpen", null));
tree.putExtra("bigArea", treeNode.getExtra().getOrDefault("bigArea", null));
});
return JSONUtil.parse(treeNodes);
}
表结构
CREATE TABLE `lxhp_area` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`reid` smallint(5) unsigned NOT NULL DEFAULT '0',
`name` varchar(120) NOT NULL DEFAULT '',
`sort_order` smallint(5) unsigned NOT NULL DEFAULT '0',
`is_open` tinyint(3) unsigned NOT NULL DEFAULT '0',
`domain` varchar(10) NOT NULL,
`big_area` int(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3433 DEFAULT CHARSET=utf8;
数据结构:
官方文档:https://hutool.cn/docs/#/core/%E8%AF%AD%E8%A8%80%E7%89%B9%E6%80%A7/%E6%A0%91%E7%BB%93%E6%9E%84/%E6%A0%91%E7%BB%93%E6%9E%84%E5%B7%A5%E5%85%B7-TreeUtil
来源:https://www.cnblogs.com/tangshengwei/p/15181115.html
0
投稿
猜你喜欢
- java控制台输出图书馆管理系统(只用java代码不用数据库和GUI,java入门的新手秒懂)在个项目中,我只用数组保存数据,和只用for循
- 一、构造方法概述构造方法是一种特殊的方法作用:创建对象Student stu = new Student();格式:pucli class
- Java中,只有8种基本类型不是对象,例如:4种整形类型(byte, short, int,long),2种浮点类型(flout, doub
- 本文实例讲述了Winform下实现图片切换特效的方法,是应用程序开发中非常实用的一个功能。分享给大家供大家参考之用。具体方法如下:本实例源自
- 本文实例讲述了C#使用listView增删操作的方法。分享给大家供大家参考。具体分析如下:应用场景: C#中使用listView控件,实现动
- Android现在实现Tab类型的界面方式越来越多,今天就把常见的实现方式给大家来个总结。目前写了:1、传统的ViewPager实现2、Fr
- 需求:request的content-type为applciation/json,进入controller之前需要把body中的参数取出来做
- 在学习 Spring Mvc 过程中,有必要来先了解几个关键参数:@Controller:在类上注解,则此类将编程一个控制器,在项目启动 S
- 前言在实际项目开发中,会碰到这样的问题,数据库表结构设计好了,可实体类还没相应地弄出来。实体类的属性命名方法一般是驼峰法,而数据库中的表字段
- 前言 侧滑的实现方式有很多方式来实现,这次总结的ViewDragHe
- 跨域配置如下,Springboot 版本为 2.4.1///跨域访问配置@Configurationpublic class CorsCon
- 小伙伴私信我说想要研究下Spring的源码,想让我出一期教程来实现IDEA导入Spring源码,今天它来了~版本 :IDEA 2020.2.
- 这篇文章主要介绍了springboot实现文件上传步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 高斯模糊高斯模糊(英语:Gaussian Blur),也叫高斯平滑,是在Adobe Photoshop、GIMP以及Paint.NET等图像
- 1. 理解abstract:抽象的2. 作用abstract可以用来修饰类、方法。不能用abstract修饰变量、代码块、构造器。不能用ab
- 1. 继承1. 子类继承了父类,获得父类的全部Field和方法。子类Student类继承父类,将可以获得父类的全部Field和方法publi
- 目录前言解决方案前言我们在开发Spring应用时可能会不小心注入两个相同类型的Bean,比如实现了两个相同Service接口的类,示例伪代码
- 一、项目运行环境配置:Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,
- 面试题1:说一下你对ReentrantLock的理解?ReentrantLock是JDK1.5引入的,它拥有与synchronized相同的
- 说明:在阅读本篇文章之前建议大家先详细学习一下spring的相关知识,有助于更深刻的理解spirngboot的配置原理。一、什么是sprin