现在有一个集合,集合中的元素具有“父子”关系,即子类的parentId是父类的id。但是这些数据不是严格按照父级子集的树状结构排列,需要在程序中处理一下。
基本思路:
1)需要一个特定结构的对象(有id、parentId、children属性,children是一个自身类型的集合),如果源集合(下文中将上面提到的集合统称为源集合)不满足这一结构,需要转换一下;
2)将这个集合进行两套循环,即内层循环和外层循环。在内层循环中依次查找外层循环中每一个元素的父节点,如果找到了就将其放入外循环的children中,第一次放入children中时,需要先创建children集合,第二次第三次以后放的时候取出此children放入就行。如果没有找到父类,说明它是个根节点,将这个元素放入最先定义的一个目标集合中。
下面给出一个例子,例子中加入的一点个性化的修改,不过大体思路和上面说的一样:
//创建menu树
public List<MenuJson> createMenuTree(List<Menu> menuList) {
List<MenuJson> result = new ArrayList<>();
List<MenuJson> targetList = convert2MJ(menuList);
for (MenuJson mj1 : targetList)