数组转树形结构只需两步

作者 : 松哥资源 本文共1002个字,预计阅读时间需要3分钟 发布时间: 2024-01-16 共645人阅读




示例标题

已很经典的菜单为例,假设结构如下:

  • id
  • parent_id
  • name
  • xxx1
  • xxx2
  • ….

按照一比一构造一个类(只增加一个children字段):

@Data
public class XXXX{
	private Long id;

	private Long parentId;

	private String name;

	private String xxx1;

	private String xxx2;

	private List<XXXX> children;
}

public List<XXXX> treeMenu() {
    List<XXXX> xxxxs = xxxxDao.menuList();

    //第一步分组
    Map<Long, List<XXXX>> parentId2Children =
        xxxxs.stream().collect(Collectors.groupingBy(i -> i.getParentId()));

    //第二步构造树
    List<XXXX> roots = parentId2Children.remove(0L);
    buildTree(roots, parentId2Children);
    
    return roots;
}

private void buildTree(List<XXXX> parents,
    Map<Long, List<XXXX>> parentId2Children) {
    if (CollUtil.isEmpty(parents)) {
        return;
    }

    parents.sort(Comparator.comparing(XXXX::getId));

    for (XXXX parent : parents) {
        List<XXXX> children = parentId2Children.remove(parent.getId());
        parent.setChildren(children);
        buildTree(children, parentId2Children);
    }
}



  • 随机毒鸡汤:让人失望这方面,我从来没让人失望过。


文章来源于justsoso.fun: 数组转树形结构只需两步





发表回复