java 不用递归写tree

 

1 需要确保数据排序是按照创建时间排序的,理论上父节点的创建时间比子节点要小,所以按照create  time asc 

  父节点会在子节点前面。

package com.fhs.ucenter.dto;

import lombok.Data;

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

/**
 * 用户下拉tree DTO
 */
@Data
public class SysUserOrgDTO {
    /**
     * 名字
     */
    private String text;
    /**
     * id
     */
    private String id;
    /**
     * 父id
     */
    private String parentId;
    /**
     * 是否是用户
     */
    private Integer isUser;
    /**
     * 子集合
     */
    private List<SysUserOrgDTO> children = new ArrayList<>();

    public SysUserOrgDTO(){}

    public SysUserOrgDTO(String text, String id, String parentId, Integer isUser, List<SysUserOrgDTO> children) {
        this.text = text;
        this.id = id;
        this.parentId = parentId;
        this.isUser = isUser;
        this.children = children;
    }
}

  上面是dto,下面是生成tree的方法 ,很简单。。比递归可读性强很多

List<SysUserOrgDTO> dbRecordList = sysUserDAO.getUserOrgTreeList(groupCode);
 
//找不到爸爸的才会放到此里面
List<SysUserOrgDTO> result = new ArrayList<>(); 
Map<String,SysUserOrgDTO> fatherDTO = dbRecordList .stream().collect(Collectors.toMap(SysUserOrgDTO::getId, item -> item));
for(SysUserOrgDTO user : dbRecord)
{
    if(fatherDTO.containsKey(user.getParentId()))
    {
        fatherDTO.get(user.getParentId()).getChildren().add(user);
    }
    else{
        result.add(user);
    }
}
return result;

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值