关于递归的思路的例子

来源:互联网 发布:nginx ip转发 编辑:程序博客网 时间:2024/06/05 15:26
前台框架是easyui,需要返回给前台tree的数据,返回的数据格式为[{id:1,text:22,children:(map)},{id:2,text:22,children:(map)},{id:3,text:22,children:(map)},{id:4,text:22,children:(map)}]。就是List<Map<String,Object>>。

代码为:

public static List<Map<String, Object>> getFileList() {          List<Map<String, Object>> redata = new ArrayList<Map<String,Object>>();          Document document = FileDao.readFile("cda/fileConfig.xml");          Element rootElement = document.getRootElement();          List<Element> lists = rootElement.elements();          for (Element element : lists) {              Map<String,Object> map = new HashMap<String,Object>();              eachFile(element, map);              redata.add(map);          }          return redata;      }               @SuppressWarnings("unchecked")      public static void eachFile(Element element,Map<String,Object> map) {          map.put("id", element.attributeValue("id"));          map.put("text", element.attributeValue("text"));          List<Map<String, Object>> childList = new ArrayList<>();        map.put("children", childList);          if(element.elements()!=null){              List<Element> childElements = element.elements();              for (Element child : childElements) {                  if(!child.getName().equals("dataset")){                  map.put("state", "closed");                Map<String,Object> map1 = new HashMap<String,Object>();                      eachFile(child,map1);                      childList.add(map1);                }              }          }      }



这里需要注意的是递归方法中要做的内容必须要清晰,对于该递归方法而言,任务就是要把传入的Element的数据提取到传入的map中,如果该element有对应的子节点,则得到子节点,把子节点的element递归调用该方法,同时传入的还有childMap。


如果不传入map,则在方法内新建map,构建完map后返回。改造后如下代码:

public static List<Map<String, Object>> getFileList() {List<Map<String, Object>> redata = new ArrayList<Map<String,Object>>();Document document = FileDao.readFile("cda/fileConfig.xml");Element rootElement = document.getRootElement();List<Element> lists = rootElement.elements();for (Element element : lists) {redata.add(eachFile(element));}return redata;}@SuppressWarnings("unchecked")public static Map<String,Object> eachFile(Element element) {Map<String,Object> map = new HashMap<String,Object>();map.put("id", element.attributeValue("id"));map.put("text", element.attributeValue("text"));if(element.elements()!=null){List<Element> childElements = element.elements();List<Map<String, Object>> childList = new ArrayList<Map<String,Object>>();map.put("children", childList);for (Element child : childElements) {if(!child.getName().equals("dataset")){childList.add(eachFile(child));}}if(childList.size()!=0){map.put("state", "closed");}}return map;}



1 0
原创粉丝点击