中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java簡單VO的樹形構建生成算法怎么使用

發布時間:2021-11-24 15:19:31 來源:億速云 閱讀:171 作者:iii 欄目:大數據

這篇文章主要介紹“Java簡單VO的樹形構建生成算法怎么使用”,在日常操作中,相信很多人在Java簡單VO的樹形構建生成算法怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java簡單VO的樹形構建生成算法怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

/** * 把一個 list的集合,根據父級屬性和子集屬性 分析稱 樹狀 * * @param vos * @param idField     - vo的父id對應的屬性名(只支持 數字或字符串!!!!!) * @param parentField - 父id的屬性(只支持 數字或字符串!!!!!) * @param childField  - 子集合的屬性名 (支持 java.util.Collection 或 數組) * @param <T> * @return */public static <T> List<T> toTree(List<T> vos, String idField, String parentField, String childField) {    if (CollUtil.isEmpty(vos)) {        return vos;    }    //緩存 ,快速查找父vo的    HashMap<Object, T> allMap = Maps.newHashMapWithExpectedSize(vos.size());    for (T vo : vos) {        allMap.put(ReflectUtil.getFieldValue(vo, idField), vo);    }    ArrayList<T> list = Lists.newArrayListWithCapacity(vos.size());    Object idValue;    Object pValue;    Object cValue;    Collection<T> childs;    Collection<T> pChilds;    List<T> directChild;    HashMap<Object, Collection<T>> id2Childs = Maps.newHashMapWithExpectedSize(vos.size());    for (T vo : vos) {        //拿到 id        idValue = ReflectUtil.getFieldValue(vo, idField);        //拿到當前vo的 父id        pValue = ReflectUtil.getFieldValue(vo, parentField);        childs = id2Childs.get(idValue);        if (childs == null) {            childs = Sets.newHashSetWithExpectedSize(vos.size());            id2Childs.put(idValue, childs);        }        pChilds = id2Childs.get(pValue);        if (pChilds == null) {            pChilds = Sets.newHashSetWithExpectedSize(vos.size());            id2Childs.put(pValue, pChilds);        }        directChild = findDirectChild(vos, idValue, parentField);        childs.addAll(directChild);        if (pValue == null || !allMap.containsKey(pValue)) {            ///沒有父id 根目錄!            list.add(vo);        } else {            pChilds.add(vo);        }    }    Class<?> aClass = list.get(0).getClass();    Field childF = ReflectUtil.getField(aClass, childField);    boolean isList = Collection.class.isAssignableFrom(childF.getType());    for (T vo : vos) {        //拿到 id        idValue = ReflectUtil.getFieldValue(vo, idField);        childs = id2Childs.get(idValue);        if (childs != null) {            if (isList) {                ReflectUtil.setFieldValue(vo, childF, childs);            } else {                ReflectUtil.setFieldValue(vo, childF, toArray(childs));            }        }    }    return list;}/** * 集合轉換成數組,數組類型是集合里元素的類型 * @param vos * @param <T> * @return */public static <T> T[] toArray(Collection<T> vos) {    Class<?> aClass = vos.iterator().next().getClass();    T[] os = (T[]) Array.newInstance(aClass, vos.size());    Iterator<T> iterator = vos.iterator();    int i = 0;    while (iterator.hasNext()) {        os[i++] = iterator.next();    }    return os;}/** * 把一個 list的集合,根據父級屬性和父id,找到 他的直系第一級孩子 * * @param vos * @param id * @param parentField * @param <T> * @return */public static <T> List<T> findDirectChild(List<T> vos, Object id, String parentField) {    if (CollUtil.isEmpty(vos)) {        return Collections.emptyList();    }    ArrayList<T> list = Lists.newArrayListWithCapacity(vos.size());    Object pValue;    for (T vo : vos) {        //拿到當前vo的 父id        pValue = ReflectUtil.getFieldValue(vo, parentField);        if (pValue == id || id.equals(pValue)) {            list.add(vo);        }    }    return list;}

到此,關于“Java簡單VO的樹形構建生成算法怎么使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

济南市| 饶平县| 牙克石市| 南充市| 湛江市| 合水县| 博白县| 全南县| 木兰县| 宕昌县| 广州市| 阜平县| 武义县| 扶风县| 康平县| 郸城县| 达拉特旗| 桃江县| 克拉玛依市| 吐鲁番市| 调兵山市| 永年县| 会理县| 淳化县| 靖宇县| 来宾市| 津南区| 明光市| 苏尼特左旗| 南川市| 内黄县| 灵武市| 镇原县| 吉隆县| 宜丰县| 获嘉县| 内乡县| 江源县| 清镇市| 商城县| 拉萨市|