目录实体

private int id;
    private int pid;
    private String name;

递归遍历方法

private void getTree(Menu menu ,List<Menu> menus){
        int pid = menu.getId();
        List<Menu> childs = null;
        Iterator<Menu> iterator = menus.iterator();
        while (iterator.hasNext()) {
            Menu m = iterator.next();
            if(m.getPid() == pid){
                childs = menu.getChild();
                if(childs == null)
                    childs = new ArrayList<Menu>();
                childs.add(m);
                iterator.remove();
                menu.setChild(childs);
            }
        }
        if(childs != null && !childs.isEmpty() && menus !=null && !menus.isEmpty()){
            Iterator<Menu> iterator2 = childs.iterator();
            while(iterator2.hasNext()){
                Menu next = iterator2.next();
                getTree(next,menus);
            }
        }
    }

------lamda语法------

@Data
public class LabelVO implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * ID
     */
    private Long id;

    /**
     * 父ID
     */
    private Long pId;

    /**
     * 标签名
     */
    private String labelName;

    /**
     * 标签值
     */
    private String labelValue;

    /**
     * 标签类别
     */
    private String labelType;

    /**
     * 排序
     */
    private Integer sort;
    /**
     * 子标签
     */
    private List<LabelVO> children;
}
public List<LabelVO> labelList(String labelType) {
        LabelVO labelVO = redisService.getCacheObject(MDA.CACHE_LABEL + labelType);
        if (labelVO != null && StringUtils.isNotEmpty(labelVO.getChildren())) {
            return labelVO.getChildren();
        }
        List<Label> labels = labelMapper.selectList(new LambdaQueryWrapper<Label>().eq(Label::getLabelType, labelType).eq(Label::getIsDelete, MDA.STRING_0));

        LabelVO rootVO = new LabelVO();
        rootVO.setId(0L);
        buildTree(rootVO, labels);
        redisService.setCacheObject(MDA.CACHE_LABEL + labelType, rootVO, CacheConstants.EXPIRATION, TimeUnit.MINUTES);
        return rootVO.getChildren();
    }

 

private void buildTree(LabelVO labelVO, List<Label> labels) {
    Long pid = labelVO.getId();
    List<LabelVO> childs = labelVO.getChildren();
    if (childs == null) {
        childs = new ArrayList<>();
    }
    Iterator<Label> iterator = labels.iterator();
    while (iterator.hasNext()) {
        Label m = iterator.next();
        if (pid.equals(m.getpId())) {
            LabelVO l = FileConvert.INSTANCE.toVO(m);
            l.setName(l.getLabelName());
            l.setValue(l.getLabelValue());
            childs.add(l);
            iterator.remove();
        }
    }
    //排序
    if(StringUtils.isNotEmpty(childs)){
        childs = childs.stream().sorted(Comparator.comparingInt(LabelVO::getSort)).collect(Collectors.toList());
        labelVO.setChildren(childs);
        if (StringUtils.isNotEmpty(labels)) {
            for (LabelVO next : childs) {
                buildTree(next, labels);
            }
        }
    }

}