TreeTest
package cn.visight.tree;import cn.hutool.json.JSONUtil;import cn.visight.modules.sys.entity.SysMenuEntity;import org.junit.Test;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.stream.Collectors;public class TreeTest { @Test public void testStreamTree() { List<SysMenuEntity> list = new ArrayList<>(); SysMenuEntity s01 = getEntity(1L,0L,"0-1"); SysMenuEntity s12 = getEntity(2L,1L,"1-2"); SysMenuEntity s13 = getEntity(3L,1L,"1-3"); SysMenuEntity s14 = getEntity(4L,1L,"1-4"); SysMenuEntity s25 = getEntity(5L,2L,"2-5"); SysMenuEntity s36 = getEntity(6L,3L,"3-6"); SysMenuEntity s37 = getEntity(7L,3L,"3-7"); SysMenuEntity s38 = getEntity(8L,3L,"3-8"); SysMenuEntity s89 = getEntity(9L,8L,"8-9"); SysMenuEntity s810 = getEntity(10L,8L,"8-10"); list.add(s01); list.add(s12); list.add(s13); list.add(s14); list.add(s25); list.add(s36); list.add(s37); list.add(s38); list.add(s89); list.add(s810); List<TreeMenu> treeMenuList = new ArrayList<>(); //转换数据,这个是前端需要的格式。 list.forEach(t->{ TreeMenu treeMenuNode = new TreeMenu(); treeMenuNode.setId(t.getId()); treeMenuNode.setParentId(t.getPid()); treeMenuNode.setName(t.getName()); treeMenuList.add(treeMenuNode); }); Map<Long, List<TreeMenu>> groupMap = treeMenuList.stream().collect(Collectors.groupingBy(TreeMenu::getParentId)); treeMenuList.forEach(treeMenu -> treeMenu.setChildren(groupMap.get(treeMenu.getId()))); List<TreeMenu> collect = treeMenuList.stream() .filter(treeMenu -> treeMenu.getParentId().equals(0L)).collect(Collectors.toList()); System.out.println(JSONUtil.toJsonStr(collect)); } public static SysMenuEntity getEntity(Long id, Long pid,String name) { SysMenuEntity s1 = new SysMenuEntity(); s1.setId(id); s1.setPid(pid); s1.setName(name); return s1; }}
TreeMenu
package cn.visight.tree;import java.util.List;public class TreeMenu { private Long id; private Long parentId; private String name; private List<TreeMenu> children; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getParentId() { return parentId; } public void setParentId(Long parentId) { this.parentId = parentId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<TreeMenu> getChildren() { return children; } public void setChildren(List<TreeMenu> children) { this.children = children; }}