java版本:
1 /** 2 * 通過集合方式生成樹 3 * @param list 4 * @return 5 */ 6 public static Map<String, Object> getTreeByColl(List<Menu> list) { 7 Map<String, Object> resmap=new HashMap<>(); 8 Map<Integer, Menu> map; 9 List<Menu> treelist= new ArrayList<>(); 10 11 if (null==list||list.isEmpty()){ 12 return null; 13 } 14 map = list.stream().collect(Collectors.toMap(Menu::getId, a -> a,(k1, k2)->k1)); 15 /*List<Map.Entry<Integer, Menu>> listMap = new ArrayList<Map.Entry<Integer, Menu>>(map.entrySet()); 16 Collections.sort(listMap, new Comparator<Map.Entry<Integer, Menu>>() { 17 public int compare(Map.Entry<Integer, Menu> o1, Map.Entry<Integer, Menu> o2) { 18 return o2.getKey().compareTo(o1.getKey()); 19 } 20 });*/ 21 // 將list集合對象轉換為json的字符串 22 // 如果id是父級的話就放入tree中treelist 23 for (Menu menu : list) { 24 if (null==map.get(menu.getParId())) { 25 treelist.add(menu); 26 } else { 27 // 子級通過父id獲取到父級的類型 28 Menu parent = map.get(menu.getParId()); 29 // 父級獲得子級,再將子級放到對應的父級中 30 parent.addChildren(menu); 31 } 32 } 33 34 35 resmap.put("data",treelist); 36 return resmap; 37 }
js版本:
const nest = (items, id = null, link =
'parent_id') =>
items
.
filter(item => item[link] === id)
.map(item => ({ ...item, children: nest(items, item.id) }));