JavaUtils-递归解析多级菜单(数据树)
2017-05-29 20:40
309 查看
工具类
多级菜单数据:id、父级id、用于装载子数据的集合/** * 树形数据实体接口 * @param <E> * @author jianda * @date 2017年5月26日 */ public interface TreeEntity<E> { public String getId(); public String getParentId(); public void setChildList(List<E> childList); }
/** * 解析树形数据工具类 * * @author jianda * @date 2017年5月29日 */ public class TreeParser{ /** * 解析树形数据 * @param topId * @param entityList * @return * @author jianda * @date 2017年5月29日 */ public static <E extends TreeEntity<E>> List<E> getTreeList(String topId, List<E> entityList) { List<E> resultList=new ArrayList<>(); //获取顶层元素集合 String parentId; for (E entity : entityList) { parentId=entity.getParentId(); if(parentId==null||topId.equals(parentId)){ resultList.add(entity); } } //获取每个顶层元素的子数据集合 for (E entity : resultList) { entity.setChildList(getSubList(entity.getId(),entityList)); } return resultList; } /** * 获取子数据集合 * @param id * @param entityList * @return * @author jianda * @date 2017年5月29日 */ private static <E extends TreeEntity<E>> List<E> getSubList(String id, List<E> entityList) { List<E> childList=new ArrayList<>(); String parentId; //子集的直接子对象 for (E entity : entityList) { parentId=entity.getParentId(); if(id.equals(parentId)){ childList.add(entity); } } //子集的间接子对象 for (E entity : childList) { entity.setChildList(getSubList(entity.getId(), entityList)); } //递归退出条件 if(childList.size()==0){ return null; } return childList; } }
测试
public class Menu implements TreeEntity<Menu>{ public String id; public String name; public String parentId; public List<Menu> childList; //set、get方法...
public class Test { public static void main(String[] args) { List<Menu> list=new ArrayList<>(); Menu menu1=new Menu(); menu1.setId("1"); menu1.setParentId("0"); menu1.setName("菜单1"); list.add(menu1); Menu menu2=new Menu(); menu2.setId("2"); menu2.setParentId("0"); menu2.setName("菜单2"); list.add(menu2); Menu menu3=new Menu(); menu3.setId("3"); menu3.setParentId("1"); menu3.setName("菜单11") 4000 ; list.add(menu3); Menu menu4=new Menu(); menu4.setId("4"); menu4.setParentId("3"); menu4.setName("菜单111"); list.add(menu4); List<Menu> menus=TreeParser.getTreeList("0",list); System.out.println(menus); } }
相关文章推荐
- java解析任意层的json数据(递归解析)
- java递归解析easyui treegrid json数据
- iOS:二叉树多级表格的使用,使用三方库TreeTableView-master实现对json解析数据的递归遍历整理成树状结构
- 递归解析任意层的Json数据,获取所有的key和value,Java实现
- list数据递归解析多级数据(树数据)
- java解析任意层的json数据(递归解析)
- java更好的解析Json数据
- java解析excel数据(转)
- Atitit 表达式原理 语法分析 原理与实践 解析java的dsl 递归下降是现阶段主流的语法分析方法
- 解析Java中的String对象的数据类型
- 全面解析Java中的String数据类型
- java利用递归调用实现树形菜单的样式
- Java:XML篇,使用SAX读取并解析XML数据
- Android/Java XML数据格式解析的两种方式
- Java后台解析Json数据的两种方式
- 小博老师解析Java核心技术 ——JSwing高级菜单制作
- Java构造和解析Json数据的两种方法详解一
- Java数据解析---SAX
- Java构造和解析Json数据