java树状结构生成工具---返回树型结构数据

发布于:2022-10-14 ⋅ 阅读:(343) ⋅ 点赞:(0)

Java通用树状结构工具

基础树状节点

@Data
public class BaseTreeNode<C,T> {
    private T id;

    private T parentId;

    private List<C> children;
}

C:指你想放返回的数据类型,这里没有加限制,应该是< C extend BaseTreeNode >
就是你返回的所有TreeNode类要继承这个BaseTreeNode,比如:

@Data
public class TestTreeVo extends BaseTreeNode<TestTreeVo ,Long> {
    private String tagName;
}

树状结构生成器

这里利用stream流分组

public class TreeNodeConvertUtils {

    public static <C extends  BaseTreeNode<C,T>,T> List<C> getChildNodes(List<C> source, T id) {
        Map< T , List<C>> result =
                source.stream().collect(Collectors.groupingBy(BaseTreeNode::getParentId));
        source.forEach(item -> item.setChildren(result.get(item.getId())));
        return result.get(id);
    }

}

具体调用,比如获取root节点下所有数据(整个Tree)

    public List<TestTreeVo> getTagCatelogList(TaggingQueryDto taggingQueryDto) {
        List<Test> records = list();
        List<TestTreeVo> userTaggingListVos = OrikaBeanUtils.mapAsList(records, TestTreeVo.class);
        return TreeNodeConvertUtils.getChildNodes(userTaggingListVos, 0L);
    }

我的root节点id是0,因此我获取0节点下数据就是整个树的数据,如果需要获取某个节点数据,比如你的字典树,你只需要传对应的节点id即可。

PS

以上还是根据项目的需要,自己更改适配性,也可以去用hutools里面的treeUtil,那个扩展性是不错,但是感觉过于繁琐,没必要,具体问题具体分析,怎么方便怎么来吧


网站公告

今日签到

点亮在社区的每一天
去签到