java使用hutool工具构建树形结构
·
模拟从字典表查出来的数据
构建树形结构
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNode;
import cn.hutool.core.lang.tree.TreeUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import cn.tedu.vo.GasDict;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @author 孙永潮
* @date 2023/3/27
*/
public class TreeNodeDemo {
//车辆种类
public static final String VEHICLE_TYPE = "300017";
public static void main(String[] args) {
//假装 这是 用sql语句 查出来的 list
List<GasDict> gasDictList = getList(VEHICLE_TYPE);
// 构建 TreeNode
List<TreeNode<Long>> nodeList = gasDictList.stream()
.map(e -> new TreeNode<>(e.getId(), e.getParentId(), e.getDictName(), e.getSort())
.setExtra(MapUtil.<String, Object>builder()
.put("dictCode", e.getDictCode())
.build()))
.collect(Collectors.toList());
// 构建树形结构 Tree
List<Tree<Long>> build = TreeUtil.build(nodeList, 0L);
//传给前端的 json格式 打印出来
System.out.println(JSONUtil.toJsonPrettyStr(build));
}
//比如 这是 字典里的值
public static List<GasDict> getList(String dictCode){
List<GasDict> gasDictList = new ArrayList<>();
gasDictList.add(new GasDict(1L, "车辆种类", 0L, 1, VEHICLE_TYPE));
gasDictList.add(new GasDict(2L, "运输车辆类型", 1L, 1, "3000170001"));
gasDictList.add(new GasDict(3L, "应急车辆类型", 1L, 2, "3000170003"));
gasDictList.add(new GasDict(4L, "LNG", 2L, 1, "30001700010001"));
gasDictList.add(new GasDict(5L, "CNG", 2L, 2, "30001700010002"));
gasDictList.add(new GasDict(6L, "LPG", 2L, 3, "30001700010003"));
gasDictList.add(new GasDict(7L, "指挥车", 3L, 1, "30001700030001"));
gasDictList.add(new GasDict(8L, "抢险救援车", 3L, 2, "30001700030002"));
gasDictList.add(new GasDict(9L, "后勤保障车", 3L, 3, "30001700030003"));
gasDictList.add(new GasDict(10L, "应急发电车", 3L, 4, "30001700030004"));
gasDictList.add(new GasDict(11L, "其应急他车", 3L, 5, "30001700030005"));
//假装 通过sql查询条件 查询字典
int length = dictCode.length();
return gasDictList.stream()
.filter(e -> Objects.equals(dictCode, StrUtil.subPre(e.getDictCode(), length)))
.collect(Collectors.toList());
}
}
pom文件dependencies
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
<!-- 加密依赖 -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<!-- swagger依赖 -->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.6.2</version>
</dependency>
<!-- hutool支持 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.20</version>
</dependency>
<!-- jackson-annotations 支持 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<scope>provided</scope>
</dependency>
<!-- jackson-databind 支持 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<scope>provided</scope>
</dependency>
<!-- jackson-datatype 支持, 以便正确序列化日期 -->
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<scope>provided</scope>
</dependency>
<!-- sa-token支持 -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.30.0</version>
</dependency>
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-alone-redis</artifactId>
<version>1.30.0</version>
</dependency>
</dependencies>
字典实体类
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
/**
* @author 孙永潮
* @date 2023/3/27
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
public class GasDict extends BaseEntity {
@ApiModelProperty(value = "字典名称")
private String dictName;
@ApiModelProperty(value = "字典编码")
private String dictCode;
@ApiModelProperty(value = "父id")
private Long parentId;
@ApiModelProperty(value = "排序")
private Integer sort;
@ApiModelProperty(value = "备注")
private String remark;
@ApiModelProperty(value = "删除状态; 0:删除 1:未删除")
private Integer deleteFlag;
public GasDict(Long id, String dictName, Long parentId, Integer sort, String dictCode) {
//这里父类的id 得用super
super.setId(id);
this.dictName = dictName;
this.parentId = parentId;
this.sort = sort;
this.dictCode = dictCode;
}
}
基础实体类
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author 孙永潮
* @date 2023/3/27
*/
@Data
public class BaseEntity implements Serializable {
//java自动生成的 序列化的版本号
private static final long serialVersionUID = 1413540666272441956L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty("主键")
@TableId(value = "ID",type = IdType.AUTO)
private Long id;
@ApiModelProperty("启用状态 0:禁用 1:启用")
@TableField(value = "GENERAL_STATUS", fill = FieldFill.INSERT)
private Integer generalStatus;
@ApiModelProperty("创建人")
@TableField(value = "CREATE_BY", fill = FieldFill.INSERT)
private String createBy;
@ApiModelProperty("创建时间")
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
private LocalDateTime createTime;
@ApiModelProperty("修改人")
@TableField(value = "UPDATE_BY", fill = FieldFill.UPDATE)
private String updateBy;
@ApiModelProperty("修改时间")
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(value = "UPDATE_TIME", fill = FieldFill.UPDATE, update = "NOW()")
private LocalDateTime updateTime;
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)