Class Trees

java.lang.Object
tech.riemann.nif.utils.tree.Trees

public class Trees extends Object
树操作工具类,提供树形结构的构建、遍历、打平和排序等功能

支持泛型,可以处理各种类型的树形数据结构

主要功能包括: 1. 将列表数据转换为树形结构 2. 将树形结构打平为列表 3. 支持前序、后序和层序遍历 4. 支持对树节点进行排序

Author:
kerbores(kerbores@riemann.tech)
  • Constructor Details

    • Trees

      public Trees()
  • Method Details

    • makeTree

      public static <E> List<E> makeTree(List<E> list, Predicate<E> rootCheck, BiPredicate<E,E> parentCheck, BiConsumer<E,List<E>> setSubChildren)
      将list合成树
      Type Parameters:
      E - 泛型实体对象
      Parameters:
      list - 需要合成树的List
      rootCheck - 判断E中为根节点的条件,如:x->x.getPId()==-1L , x->x.getParentId()==null,x->x.getParentMenuId()==0
      parentCheck - 判断E中为父节点条件,如:(x,y)->x.getId().equals(y.getPId())
      setSubChildren - E中设置下级数据方法,如:Menu::setSubMenus
      Returns:
      合成好的树
    • flat

      public static <E> List<E> flat(List<E> tree, Function<E,List<E>> getSubChildren, Consumer<E> setSubChildren)
      将树打平成list
      Type Parameters:
      E - 泛型实体对象
      Parameters:
      tree - 需要打平的树
      getSubChildren - 获取下级数据方法,如:Menu::getSubMenus
      setSubChildren - 将下级数据置空方法,如:x->x.setSubMenus(null)
      Returns:
      打平后的数据
    • forPreOrder

      public static <E> void forPreOrder(List<E> tree, Consumer<E> consumer, Function<E,List<E>> getSubChildren)
      前序遍历
      Type Parameters:
      E - 泛型实体对象
      Parameters:
      tree - 需要遍历的树
      consumer - 遍历后对单个元素的处理方法,如:x-> System.out.println(x)、 System.out::println打印元素
      getSubChildren - 获取下级数据方法,如:Menu::getSubMenus
    • forLevelOrder

      public static <E> void forLevelOrder(List<E> tree, Consumer<E> consumer, Function<E,List<E>> getSubChildren)
      层序遍历
      Type Parameters:
      E - 泛型实体对象
      Parameters:
      tree - 需要遍历的树
      consumer - 遍历后对单个元素的处理方法,如:x-> System.out.println(x)、 System.out::println打印元素
      getSubChildren - 获取下级数据方法,如:Menu::getSubMenus
    • forPostOrder

      public static <E> void forPostOrder(List<E> tree, Consumer<E> consumer, Function<E,List<E>> getSubChildren)
      后序遍历
      Type Parameters:
      E - 泛型实体对象
      Parameters:
      tree - 需要遍历的树
      consumer - 遍历后对单个元素的处理方法,如:x-> System.out.println(x)、 System.out::println打印元素
      getSubChildren - 获取下级数据方法,如:Menu::getSubMenus
    • sort

      public static <E> List<E> sort(List<E> tree, Comparator<? super E> comparator, Function<E,List<E>> getChildren)
      对树所有子节点按comparator排序
      Type Parameters:
      E - 泛型实体对象
      Parameters:
      tree - 需要排序的树
      comparator - 排序规则Comparator,如:Comparator.comparing(MenuVo::getRank)按Rank正序 ,(x,y)->y.getRank().compareTo(x.getRank()),按Rank倒序
      getChildren - 获取下级数据方法,如:MenuVo::getSubMenus
      Returns:
      排序好的树