比如我们要得到[{id:1,name:'test1',
son:[{id:2,name:'test2',son[]}, id:3,name:'test3',son:[] ]}]
这样格式的数据,我们数据库是个菜单表,一般是用递归算法一层层去解析。
我的方案是
写一个菜单的pojo ------- AdminMenu 这个pojo里面有一个son的List<AdminMenu > 属性。
// 这里注意,这个list中 父菜单一定要在子菜单前面
private String findMenuTreeJosn(List<AdminMenu> menuList)
{
// 用于根据id查找对应父节点
Map<Integer, AdminMenu> menuItemMap = new LinkedHashMap<>();
AdminMenu fatherItem = null;
// 遍历所有菜单,找到他们的父菜单对象,并且把自己挂到他的父菜单的son中
for (AdminMenu menu : menuList)
{
fatherItem = menuItemMap.get(menu.getFatherMenuId());
menuItemMap.put(menu.getMenuId(), menu);
// 如果找不到父部门 返回
if (fatherItem == null)
{
continue;
}
fatherItem.getSonMenu().add(menu);
}
Set<Integer> menuKeySet = menuItemMap.keySet();
AdminMenu tempMenuItem = null;
menuList = new ArrayList<>();
// 便利所有的菜单,找到一级菜单,将一级菜单对象添加到集合中,这个一级菜单下面的所有子菜单和孙子菜单都已经挂在他下面了,所以我们不管
for(Integer menuId : menuKeySet)
{
tempMenuItem = menuItemMap.get(menuId);
// fatherid=0 代表为一级菜单
if(tempMenuItem.getFatherMenuId() == 0)
{
menuList.add(tempMenuItem);
}
}
// 将这个list转换为 json对象就ok了
return JsonUtils.list2json(menuList);
}