废话不多说,直接先上工具类!
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import main.java.com.skyi.ietm.po.Tree;
/**
* 菜单树结构工具
* @author yuyuyu
*
*/
public class MenuTreeUtil {
public static Map<String,Object> mapArray = new LinkedHashMap<String, Object>();
public List<Tree> menuCommon;
public List<Object> list = new ArrayList<Object>();
/**
* 将list转成结构树形态
* @param menu
* @return
*/
public List<Object> menuList(List<Tree> menu){
this.menuCommon = menu;
for (Tree x : menu) {
Map<String,Object> mapArr = new LinkedHashMap<String, Object>();
if(x.getpId().equals("0")){
mapArr.put("id", x.getId());
mapArr.put("name", x.getName());
mapArr.put("pid", x.getpId());
mapArr.put("childList", menuChild(x.getId()));
list.add(mapArr);
}
}
//list.get(0)
return list;
}
/**
* 添加子节点,配合menuList使用,一般不单独调用
* @param id
* @return
*/
public List<?> menuChild(String id){
List<Object> lists = new ArrayList<Object>();
for(Tree a:menuCommon){
Map<String,Object> childArray = new LinkedHashMap<String, Object>();
if(a.getpId().equals(id)){
childArray.put("id", a.getId());
childArray.put("name", a.getName());
childArray.put("pid", a.getpId());
childArray.put("childList", menuChild(a.getId()));
lists.add(childArray);
}
}
return lists;
}
int sid=0;
List<Tree> lll=new ArrayList<Tree>();
/**
* 将结构树形态转成list
* @param menuList 结构树列表
* @param scid 初始父级ID填0
* @param ssid 初始ID填1
* @return
*/
public List<Tree> compileList(List<Object> menuList,String scid,String ssid){
sid=Integer.parseInt(ssid);
for (Object o : menuList) {
Map<String,Object> m=(Map<String, Object>) o;
String pid=(String) m.get("pid");
Tree e=new Tree();
e.setId(""+sid);
sid++;
e.setName((String) m.get("name"));
e.setpId(scid);
lll.add(e);
List<Object> li=(List<Object>) m.get("childList");
if(li.size()>0){
compileList(li,e.getId(),sid+"");
}
}
return lll;
}
}
具体的实体类很简单,工具类中也有用到,阅读一下代码就知道了,就不贴出来了!