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; }

浙公网安备 33010602011771号