java 和 js非递归成树

编程入门 行业动态 更新时间:2024-10-22 09:27:12

java 和 js非<a href=https://www.elefans.com/category/jswz/34/1771140.html style=递归成树"/>

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非递归成树

本文发布于:2024-02-05 09:10:51,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1674026.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:递归   java   js

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!