单节点多级子节点
public class Test {
static List< Menu> menus = Arrays. asList (
new Menu ( 1 , null, "一级菜单" ) ,
new Menu ( 2 , 1 , "二级菜单_1" ) ,
new Menu ( 3 , 1 , "二级菜单_2" ) ,
new Menu ( 4 , 3 , "三级菜单_1" ) ,
new Menu ( 5 , 3 , "三级菜单_2" ) ,
new Menu ( 6 , 5 , "四级菜单_1" ) ,
new Menu ( 7 , 5 , "四级菜单_2" ) ,
new Menu ( 8 , 5 , "四级菜单_3" )
) ;
public static void main ( String[ ] args) {
Menu data = menuTree ( 1 , null) ;
System. out. println ( new Gson ( ) . toJson ( data) ) ;
}
public static Menu menuTree ( Integer id, Menu m) {
Menu menu = m == null ? selectById ( id) . get ( 0 ) : m;
List< Menu> childMenus = selectByPid ( id) ;
for ( Menu child : childMenus) {
Menu vo = menuTree ( child. getId ( ) , child) ;
menu. getMenus ( ) . add ( vo) ;
}
return menu;
}
public static Menu menuTree2 ( Integer id) {
Menu menu = selectById ( id) . get ( 0 ) ;
List< Menu> childMenus = selectByPid ( id) ;
for ( Menu child : childMenus) {
Menu vo = tree2 ( child. getId ( ) ) ;
menu. getMenus ( ) . add ( vo) ;
}
return menu;
}
private static List< Menu> selectById ( Integer id) {
return menus. stream ( ) . filter ( m - > id. equals ( m. getId ( ) ) ) . collect ( Collectors. toList ( ) ) ;
}
private static List< Menu> selectByPid ( Integer id) {
return menus. stream ( ) . filter ( m - > id. equals ( m. getPid ( ) ) ) . collect ( Collectors. toList ( ) ) ;
}
}
class Menu {
private Integer id;
private Integer pid;
private String menuName;
private List< Menu> menus = new ArrayList ( ) ;
public Menu ( Integer id, Integer pid, String menuName) {
super ( ) ;
this . id = id;
this . pid = pid;
this . menuName = menuName;
}
}