递归成树"/>
java 和 js非递归成树
测试类
public class A{private Integer id;private Integer parantId;private String name;private List<A> children=new ArrayList<A>();public List<A> getChildren() {return children;}public void setChildren(List<A> children) {this.children = children;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Integer getParantId() {return parantId;}public void setParantId(Integer parantId) {this.parantId = parantId;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
public class TreeUtil {public static <T,M> List<T> toTree(List<T> data,TreeGetList<T> callList,TreeGetCode<M,T> code,TreeGetCode<M,T> pcode){Map<M,T> groupData=new HashMap<M,T>();for(T t:data) {groupData.put(code.getCode(t), t);}data.forEach(m->{M paran=pcode.getCode(m); if(paran!=null&&groupData.containsKey(paran)) {List<T> d= callList.getList(groupData.get(paran));d.add(m);}});for(int j=data.size()-1;j>=0;j--) {M paran= pcode.getCode(data.get(j));if(!(paran==null||!groupData.containsKey(paran))) {data.remove(j);}} return data;} public interface TreeGetList<T>{public List<T> getList(T t);}public interface TreeGetCode<T,M>{public T getCode(M m);}
}
最后main 调用测试
public static void main(String ...args) {A o=new A();o.setId(1);A o1=new A();o1.setId(2);o1.setParantId(1);List<A> data=new ArrayList<A>();data.add(o);data.add(o1); A o3=new A();o3.setId(55);o3.setParantId(1);data.add(o3);data= TreeUtil.toTree(data, //数据源m->m.getChildren() //获取子节点列表, m->m.getId() //获取id,m->m.getParantId() //获取父节点id);System.out.println(JSONObject.toJSONString(data));}
var toTree=function(data,id,pid,childName){var pdata={};for(var i=0;i<data.length;i++){ var key=data[i][pid]; if(!pdata[key]){ pdata[key]=[]; } pdata[key].push(data[i]); } //构建下级关系 for(var i=0;i<data.length;i++){ if(pdata[data[i][id]]){ data[i][childName]=pdata[data[i][id]]; for(var q=0;q<data[i][childName].length;q++){ data[i][childName][q].delete=true; } } } for(var i=data.length-1;i>=0;i--){ if(data[i].delete){ //删除节点数据 delete data[i].delete;data.splice(i,1); } }return data;}
测试代码
toTree([{id:1,pid:null},{id:2,pid:1},{id:3,pid:2}],"id","pid","list")
更多推荐
java 和 js非递归成树
发布评论