Java 平铺列表转为树形结构

在业务中往往有一些数据是有层级结构的,比如数据表中原始数据如下形式

idnameparentId
11null
21-11
31-1-12
41-11

想要将平铺的数据变成有层次的树形结构,这里分享一个非递归列表转为树形结构的思路方法。

基本的数据结构

@Data
public class Result implements Serializable {

    private List<Result> children;
		//父id
    private Integer parentId;
		//当前Id
    private Integer id;

    private String name;

}

转换方法

//sourceList 平铺的原始数据集合
public List<Result> list2Tree(List<Result> sourceList) {
        if (CollectionUtils.isEmpty(sourceList)) {
            return Collections.emptyList();
        }
        List<Result> resultList = new ArrayList<>();
        //将数据封装成树形结构
        Map<Integer, Result> map = new HashMap<>();
        for (Result data : sourceList) {
            map.put(data.getId(), data);
        }
        for (Result data : sourceList) {
            Result obj = map.get(data.getParentId());
            if (obj != null) {
                List<Result> children = obj.getChildren();
                if (children == null || children.isEmpty()) {
                    children = new ArrayList<>();
                }
                children.add(data);
                obj.setChildren(children);

            } else {
                resultList.add(data);
            }

        }
        return resultList;
    }

经过list2Tree方法转换之后,原始数据就被转为有层级的树形结构了。

原始数据json形式

[{
	"id": 1,
	"name": "1",
	"parentId": null
}, {
	"id": 2,
	"name": "1-1",
	"parentId": 1
}, {
	"id": 3,
	"name": "1-1-1",
	"parentId": 2
}, {
	"id": 4,
	"name": "1-1",
	"parentId": 1
}]

转完之后 树形结构

[{

	"id": 1,
	"name": "1",
	"children": [{
		"id": 2,
		"name": "1-1",
		"parentId": 1,
		"children": [{
			"id": 3,
			"name": "1-1-1",
			"parentId": 2
		}]
	}, {
		"id": 4,
		"name": "1-1",
		"parentId": 1
	}]
}]
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值