java 集合转树

       转载地址  https://www.cnblogs.com/liyhbk/p/16207683.html      

仅做自己备忘学习

 

 

package com.utils;

import lombok.Data;
import java.util.List;

/**
 * @Description:
 * @Author: 
 */
@Data
public class TestEntity {
    private int id;
    private String name;
    private int parentId;
    
    private List<TestEntity> children;

}

 

流方式

private static List<TestEntity> listToTree1(List<TestEntity> list) {
    // 要点
    // 通过Collectors.groupingBy(Address::getPid)方法对addresses按照Pid进行分组,也就是将pid相同的放在一起
    Map<Integer, List<TestEntity>> parentMap = list.stream().collect(Collectors.groupingBy(TestEntity::getParentId));
    list.forEach(item -> {
        item.setChildren(parentMap.get(item.getId()));
    });
    // 过滤出根节点集合,根节点已经包含了孩子节点
    List<TestEntity> newList = list.stream().filter(item -> item.getParentId() == 0).collect(Collectors.toList());
    return newList;
}

 

递归方式

/**
* 使用递归方法建树
*
* @param list 要转成树的集合
* @return List
*/
public static List<TestEntity> listToTree2(List<TestEntity> list) {
    List<TestEntity> trees = new ArrayList<>();
    for (TestEntity entity : list) {
        int parentId = entity.getParentId();
        if (parentId == 0) {
            // 是父级
            trees.add(findChildren(entity, list));
        }
    }
    return trees;
}

/**
* 递归查找子节点
*
* @param entity 对象
* @param list 子节点
* @return MenuTree
*/
private static TestEntity findChildren(TestEntity entity, List<TestEntity> list) {
    for (TestEntity info : list) {
        if (entity.getId() == info.getParentId()) {
            if (entity.getChildren() == null) {
                entity.setChildren(new ArrayList<>());
            }
            entity.getChildren().add(findChildren(info, list));
        }
    }
    return entity;
}

 

posted @ 2025-08-15 16:35  Devan.Yan  阅读(9)  评论(0)    收藏  举报