JAVA8 stream 递归生成树结构
@Data
@AllArgsConstructor
public class Menu {
@ApiModelProperty("唯一id")
private Integer id;
@ApiModelProperty("名称")
private String name;
@ApiModelProperty("父类id")
private Integer pId;
@ApiModelProperty("子节点集合")
private List<Menu> childNodeList;
static List<Menu> listTree = new ArrayList<>();
static {
listTree.add(new Menu(1,"爷",0,null));
listTree.add(new Menu(2,"二爷",0,null));
listTree.add(new Menu(3,"爷-爸",1,null));
listTree.add(new Menu(4,"爷-叔",1,null));
listTree.add(new Menu(5,"二爷-爸",2,null));
listTree.add(new Menu(6,"爷-爸-大儿子",3,null));
listTree.add(new Menu(7,"爷-爸-小儿子",3,null));
listTree.add(new Menu(8,"二爷-爸-大儿子",5,null));
listTree.add(new Menu(9,"二爷-爸-小儿子",5,null));
listTree.add(new Menu(10,"爷-叔-大儿子",4,null));
listTree.add(new Menu(11,"爷-叔-小儿子",4,null));
}
public static List<Menu> selectTree(int parentId, List<Menu> menus) {
return menus.stream()
.filter(menu -> menu.getParentId().equals(parentId))
.peek(menu -> menu.setChildNodeList(selectTree(menu.getId(), menus)))
.collect(Collectors.toList());
}
public static void main(String[] args) {
List<TreeEntity> menus = selectTree(0, listTree);
}
}