【java】list转tree树型结构

核心方法:

 /**
     * list转tree
     * @param list 待转的list
     * @param pid 顶级pid
     * @return 树型结构数据
     */
    private static List<DTO> getTree(List<DTO> list, String pid) {

        List<DTO> rootList = new ArrayList<>();
        Iterator<DTO> iterator = list.iterator();
        while (iterator.hasNext()){
            DTO dto = iterator.next();
            if (pid.equals(dto.getPid())){
                rootList.add(dto);
                iterator.remove();
            }
        }

        for (DTO dto : rootList) {
            List<DTO> child = getTree(list, dto.getId());
            dto.setChildren(child);
        }
        return rootList;
    }

 用法:

待转换的数据:

[
    {
        "id": "1",
        "pid": "0"
    },
    {
        "id": "2",
        "pid": "0"
    },
    {
        "id": "3",
        "pid": "1"
    },
    {
        "id": "4",
        "pid": "1"
    },
    {
        "id": "5",
        "pid": "2"
    },
    {
        "id": "6",
        "pid": "2"
    },
    {
        "id": "7",
        "pid": "3"
    }
]

转换之后的数据:

[
    {
        "children": [
            {
                "children": [
                    {
                        "children": [],
                        "id": "7",
                        "pid": "3"
                    }
                ],
                "id": "3",
                "pid": "1"
            },
            {
                "children": [],
                "id": "4",
                "pid": "1"
            }
        ],
        "id": "1",
        "pid": "0"
    },
    {
        "children": [
            {
                "children": [],
                "id": "5",
                "pid": "2"
            },
            {
                "children": [],
                "id": "6",
                "pid": "2"
            }
        ],
        "id": "2",
        "pid": "0"
    }
]

对应的实体类:

@Data
@Builder
public class DTO {

    private String id;

    @ParentId
    private String pid;

    private List<DTO> children = new ArrayList<>();
}

完整示例,main方法:

public class Main {

    public static void main(String[] args) {
        List<DTO> list = getList();
        System.err.println("list:"+JSON.toJSONString(list));
        List<DTO> tree = getTree(list, "0");
        System.err.println("tree:"+JSON.toJSONString(tree));
    }

    public static List<DTO> getList() {
        DTO dto1 = DTO.builder().id("1").pid("0").build();
        DTO dto2 = DTO.builder().id("2").pid("0").build();
        DTO dto3 = DTO.builder().id("3").pid("1").build();
        DTO dto4 = DTO.builder().id("4").pid("1").build();
        DTO dto5 = DTO.builder().id("5").pid("2").build();
        DTO dto6 = DTO.builder().id("6").pid("2").build();
        DTO dto7 = DTO.builder().id("7").pid("3").build();

        List<DTO> list = new ArrayList<>();
        list.add(dto1);
        list.add(dto2);
        list.add(dto3);
        list.add(dto4);
        list.add(dto5);
        list.add(dto6);
        list.add(dto7);
        return list;
    }

    /**
     * list转tree
     * @param list 待转的list
     * @param pid 顶级pid
     * @return 树型结构数据
     */
    private static List<DTO> getTree(List<DTO> list, String pid) {

        List<DTO> rootList = new ArrayList<>();
        Iterator<DTO> iterator = list.iterator();
        while (iterator.hasNext()){
            DTO dto = iterator.next();
            if (pid.equals(dto.getPid())){
                rootList.add(dto);
                iterator.remove();
            }
        }

        for (DTO dto : rootList) {
            List<DTO> child = getTree(list, dto.getId());
            dto.setChildren(child);
        }
        return rootList;
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿来小同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值