java实现递归组装树结构的数据

简介: java语言递归组装数据

开发中,经常遇到存在树形结构的数据,如行政区划这类数据,一级一级分层,后端需要组装好树形结构数据返回给前端。

由于返给前端的json数据中,如果是叶子节点了,说明它没有子节点,那么就没必要返回chirldren 属性给前端了,此时只需要加一个注解即可:@JsonInclude(JsonInclude.Include.NON_EMPTY),该注解会自动判断集合是否为空,为空的话就不返回给前端展示了。如果是String类型的属性的话,就使用@JsonInclude(JsonInclude.Include.NON_NULL)注解

实体类:

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.experimental.Accessors;

/**
 * <p>
 * 区域表
 * </p>
 *
 * @author sgw
 * @since 2023年09月06日
 */
@Data
@Accessors(chain = true)
@TableName("HJBZ_QY")
public class HjbzQy implements Serializable {
   

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @TableId(value = "ID", type = IdType.AUTO)
    private String id;

    /**
     * 区域名称 0表示顶级区域
     */
    @TableField("QYMC")
    private String qymc;

    /**
     * 区域编码 0表示顶级区域
     */
    @TableField("QYBM")
    private String qybm;

    /**
     * 父级区域名称
     */
    @TableField("PARENT_QYMC")
    private String parentQymc;

    /**
     * 父级ID
     */
    @TableField("PID")
    private String pid;

    /**
     * 封装树结构数据
     * exist设置该属性为 false,表示在查询中不使用该字段
     *  @JsonInclude(JsonInclude.Include.NON_EMPTY): 为空时就不返回给前端了(说明是叶子节点了,没必要返给前端一个空集合)
     */
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    @TableField(exist = false)
    List<HjbzQy> chirldren = new ArrayList<>();
}
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ts.hjbz.entity.HjbzQy;
import com.ts.hjbz.dao.HjbzQyMapper;
import com.ts.hjbz.service.HjbzQyService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 区域表 服务实现类
 * </p>
 *
 * @author sgw
 * @since 2023年09月06日
 */
@Service
public class HjbzQyServiceImpl extends ServiceImpl<HjbzQyMapper, HjbzQy> implements HjbzQyService {
   
    @Autowired
    private  HjbzQyMapper hjbzQyMapper;

    @Override
    public List<HjbzQy> getDetailTree() {
   
        QueryWrapper<HjbzQy> wrapper = new QueryWrapper<>();
        List<HjbzQy> hjbzQyList= hjbzQyMapper.selectList(wrapper);

        //顶级节点的pid是0
        List<HjbzQy> tree = createTree(hjbzQyList, "0");
        return tree;
    }

    /**
     * 递归建立树形结构 (算法)
     * @param lists
     * @param pid
     * @return
     */
    private List<HjbzQy> createTree(List<HjbzQy> lists, String pid) {
   
        List<HjbzQy> tree = new ArrayList<>();
        for (HjbzQy qy : lists) {
   
            if (qy.getPid() .equals(pid) ) {
   
                qy.setChirldren(createTree(lists,qy.getId()));
                tree.add(qy);
            }
        }
        return tree;
    }
}
相关文章
|
7天前
|
安全 Java 大数据
|
3天前
|
自然语言处理 Java 编译器
【Java探索之旅】方法重载 递归
【Java探索之旅】方法重载 递归
10 0
|
3天前
|
安全 Java 网络安全
深入理解Java异常处理网络安全与信息安全:保护数据的关键策略
【4月更文挑战第29天】本文将深入探讨Java中的异常处理机制,包括异常的概念、分类、捕获和处理等方面。通过详细的解析和实例演示,帮助读者更好地理解Java异常处理的原理和应用。 【4月更文挑战第29天】在数字化时代,数据成为最宝贵的资产之一。随着网络攻击的日益猖獗,了解并实施有效的网络安全和信息保护措施变得至关重要。本文将深入探讨网络安全漏洞的概念、加密技术的重要性以及提升个人和企业的安全意识的必要性。我们将分析当前的安全挑战,并提供一系列实用的防护策略,旨在帮助读者构建一个更加安全的数字环境。
|
3天前
|
Java 关系型数据库 MySQL
【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术
【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术
|
6天前
|
Java Apache
java读取excel数据案例
Java代码示例使用Apache POI库读取Excel(example.xlsx)数据。创建FileInputStream和XSSFWorkbook对象,获取Sheet,遍历行和列,根据单元格类型(STRING, NUMERIC, BOOLEAN)打印值。需引入Apache POI库并确保替换文件路径。
7 1
|
7天前
|
SQL Java 数据库
java代码中调用dao层查询接口,代码没有返回数据,打印出的sql查出了数据
java代码中调用dao层查询接口,代码没有返回数据,打印出的sql查出了数据
13 1
|
7天前
|
SQL Java 关系型数据库
java 递归返回树形组织结构(附带树形菜单的搜索)
java 递归返回树形组织结构(附带树形菜单的搜索)
10 0
|
7天前
|
存储 Java
Java中利用BitMap位图实现海量级数据去重
Java中利用BitMap位图实现海量级数据去重
|
10天前
|
Java
Java类 初始化顺序 | 静态数据的初始化
Java类 初始化顺序 | 静态数据的初始化
7 0
|
21天前
|
Java Spring
基于Java多线程处理数据
【4月更文挑战第9天】 基于Java多线程处理数据