—— 阿尔伯特·爱因斯坦

程序员の奇妙冒险

JavaJava
2018-07-21 18:58阅读:19评论:0

java 非递归list转换为树tree型结构

需求 最近在做一个导出数据生成树节点的工作 ,从数据库中导出全国省市区街道数据,查询出来是 list集合需要转换成树 tree 表 大概有这几个字段 CREATE TABLE dic ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(63) NOT...

views-a5d25dd831.css"> md-250d69367f.min.css">

需求

  • 最近在做一个导出数据生成树节点的工作 ,从数据库中导出全国省市区街道数据,查询出来是 list集合需要转换成树 tree

3">

  • 大概有这几个字段
CREATE TABLE dic (
  id int(11) NOT NULL AUTOINCREMENT,
  name varchar(63) NOT NULL,
  parentid int(11) NOT NULL,
) ;

代码

15">DicTree类

import java.util.ArrayList;
import java.util.List;

/*PROTECTED1_ @author czw
 PROTECTED2_/
public class DicTree {

    /*PROTECTED3_ 节点id
     PROTECTED4___PROTECTED5_ 城市名称
     PROTECTED6___PROTECTED7_ 父级id
     PROTECTED8___PROTECTED9_ 子节点
     PROTECTED10___PROTECTED11_ 当前属于第几级节点
     PROTECTED12___PROTECTED13_ 这里只要三级节点,如果不限制子节点个数,去掉 dicTree.getNode()判断
             PROTECTED14___PROTECTED15_ 防止 fastjson把对象转化成json出现 $ref,加上 SerializerFeature.DisableCircularReferenceDetect
            PROTECTED16___PROTECTED17__ 这里只要三级节点,如果不限制子节点个数,去掉 dicTree.getNode()判断
                 */
                if (dicTree.getId() == childrenDicTree.getParentId() && dicTree.getNode() < 2) {
                    if (dicTree.getChild() == null || dicTree.getChild().size() == 0) {
                        List<DicTree> myChildrens = new ArrayList<>();
                        removeList.add(childrenDicTree.getId());
                        myChildrens.add(childrenDicTree);
                        dicTree.setChild(myChildrens);
                    } else {
                        removeList.add(childrenDicTree.getId());
                        dicTree.getChild().add(childrenDicTree);
                    }
                }
            }
        }
        //如果是子节点,则已经移入到父级下面,因此需要从集合中移除
        for (int i = 0; i < dicList.size(); i++) {
            DicTree item = dicList.get(i);
            if (removeList.contains(item.getId())) {
                dicList.remove(item);
                i--;
            }
        }
        return dicList;
    }
  • 这种遍历就不需要考虑parentId是否为0
评论(0)
暂无评论来抢沙发吧~