JDK8  组装成树

1.返回的结果集

@Data
public class TreeDeviceDTO {

    /**
     * 节点id
     */
    private String id;

    /**
     * 节点名称
     */
    private String name;

    /**
     * 父节点
     */
    private String parentId;

    /**
     * 层级
     *
     */
    private Integer level;
}

2,定义全局的变量 来封装层级

private List<TreeDeviceDTO> rootList; // 根节点对象存放到这里

private List<TreeDeviceDTO> bodyList; // 其他节点存放到这里,可以包含根节点 (我放的是2,3级的节点)

public JtlCompanyGradeServiceImpl(List<TreeDeviceDTO> rootList, List<TreeDeviceDTO> bodyList) {
    this.rootList = rootList;
    this.bodyList = bodyList;
}

rootList  和  bodyList 封装好了 

直接调用下边这个方法 组成树

 

public List<TreeDeviceDTO> getTree() {   //调用的方法入口
    if (CollectionUtils.isNotEmpty(bodyList) && CollectionUtils.isNotEmpty(bodyList)) {
        //声明一个map,用来过滤已操作过的数据
        Map<String, String> map = Maps.newHashMapWithExpectedSize(bodyList.size());
        rootList.forEach(beanTree -> getChild(beanTree, map));
        return rootList;
    }
    return null;

}

public void getChild(TreeDeviceDTO beanTree, Map<String, String> map) {
    List<TreeDeviceDTO> childList = Lists.newArrayList();
    bodyList.stream().filter(c -> !map.containsKey(c.getId())).filter(c -> c.getParentId().equals(beanTree.getId()))
            .forEach(c -> {
                map.put(c.getId(), c.getParentId());
                getChild(c, map);
                childList.add(c);
            });
    beanTree.setChildTreeDto(childList);
}

 

 

 

 

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » JDK8 组装成树