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