构建树形结构

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;
}
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐