91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

宜川县| 滨海县| 齐河县| 萨迦县| 涞源县| 唐河县| 桐城市| 东阳市| 普兰店市| 确山县| 离岛区| 米脂县| 阳春市| 卢湾区| 仁化县| 顺平县| 科尔| 黔西县| 桃源县| 梁平县| 鄄城县| 容城县| 林州市| 马龙县| 湖南省| 永城市| 姜堰市| 中阳县| 宜兴市| 澎湖县| 柯坪县| 浠水县| 邹平县| 青冈县| 琼结县| 龙山县| 梨树县| 文山县| 天津市| 绵竹市| 镇安县|