public static void createTreeTable(List<Test> list){
TreeMap<Long, List<Test>> collect = list.parallelStream().collect(Collectors.groupingBy(Test::getParentId, TreeMap::new, Collectors.toList()));
System.out.println(collect);
}
public static <T> List<T> createTree(T t,List<T> list,String curFiled,String parentFiled,String chidrenFiled,Object topTag){
List<T> children;
if (t != null) {
children = list.parallelStream().filter(e -> Objects.equals(getInvoke(parentFiled, e), getInvoke(curFiled, t))).collect(Collectors.toList());
} else {
children = list.parallelStream().filter(e -> getInvoke(parentFiled,e) == topTag).collect(Collectors.toList());
}
if (children.size() == 0) {
return null;
}
children.forEach(child -> setInvoke(chidrenFiled,child,createTree(child, list, curFiled, parentFiled, chidrenFiled, topTag)));
return children;
}
private static Object getInvoke(String fieldName, Object o) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getter = String.format("get%s%s", firstLetter,fieldName.substring(1));
Method method = o.getClass().getDeclaredMethod(getter);
return method.invoke(o);
} catch (Exception e) {
System.out.println(fieldName+">>>>方法执行异常");
return null;
}
}
private static void setInvoke(String fieldName, Object o,List arg) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String setter = String.format("set%s%s", firstLetter,fieldName.substring(1));
Method method = o.getClass().getDeclaredMethod(setter,List.class);
method.invoke(o,arg);
} catch (Exception e) {
System.out.println(fieldName+">>>>方法执行异常");
}
}