JavaScript版本请点击这里
辅助类
TreeConverterException.class
public class TreeConverterException extends RuntimeException {
private static final long serialVersionUID = 1L;
public TreeConverterException() {
super();
}
public TreeConverterException(String message, Throwable cause, boolean enableSuppression,
boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
public TreeConverterException(String message, Throwable cause) {
super(message, cause);
}
public TreeConverterException(String message) {
super(message);
}
public TreeConverterException(Throwable cause) {
super(cause);
}
}
TreeConverterId.class
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Documented
@Inherited
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface TreeConverterId {
}
TreeConverterParent.class
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Documented
@Inherited
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface TreeConverterParent {
}
TreeConverterChildren.class
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Documented
@Inherited
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface TreeConverterChildren {
}
TreeConverterLevel.class
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 此注解不是必须的
*/
@Documented
@Inherited
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface TreeConverterLevel {
}
List2TreeConverterBean.class
import java.util.List;
public interface List2TreeConverterBean<T> {
Object getId(T t);
Object getParentId(T t);
List<T> getChildren(T t);
}
Tree2ListConverterBean.class
import java.util.List;
public interface Tree2ListConverterBean<T> {
List<T> getChildren(T t);
void nullChildren(T t);
void setLevel(T t, int level);
}
LevelStrategy.class
public interface LevelStrategy<T> {
/**
* 设置level策略
* @param level 程序生成的默认level
* @param t 单个元素对象
* @return level 从1开始
*/
Object getLevel(int level, T t);
}
核心类
TreeConverter.class
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TreeConverter {
private TreeConverter() {}
public static <T> List<T> list2Tree(List<T> list) {
return list2Tree(list, new List2TreeConverterBean<T>() {
private Field idField;
private Field parentIdField;
private Field childrenField;
@Override
public Object getId(T t) {
if (this.idField == null) {
Field[] fields = t.getClass().getDeclaredFields();
TreeConverterId converterId = null;
for (Field field : fields) {
converterId = field.getAnnotation(TreeConverterId.class);
if (converterId != null) {
field.setAccessible(true);
this.idField = field;
break;
}
}
if (this.idField == null) {
throw new TreeConverterException(t.getClass().getTypeName() + "@TreeConverterId is not found");
}
}
try {
return this.idField.get(t);
} catch (IllegalArgumentException | IllegalAccessException e) {
throw new TreeConverterException(t.getClass().getTypeName() + "@TreeConverterId Reflect exception", e);
}
}
@Override
public Object getParentId(T t) {
if (this.parentIdField == null) {
Field[] fields = t.getClass().getDeclaredFields();
TreeConverterParent converterParent = null;
for (Field field : fields) {
converterParent = field.getAnnotation(TreeConverterParent.class);
if (converterParent != null) {
field.setAccessible(true);
this.parentIdField = field;
break;
}
}
if (this.parentIdField == null) {
throw new TreeConverterException(t.getClass().getTypeName() + "@TreeConverterParent is not found");
}
}
try {
return this.parentIdField.get(t);
} catch (IllegalArgumentException | IllegalAccessException e) {
throw new TreeConverterException(t.getClass().getTypeName() + "@TreeConverterParent Reflect exception", e);
}
}
@Override
public List<T> getChildren(T t) {
if (this.childrenField == null) {
Field[] fields = t.getClass().getDeclaredFields();
TreeConverterChildren converterChildren = null;
for (Field field : fields) {
converterChildren = field.getAnnotation(TreeConverterChildren.class);
if (converterChildren != null) {
field.setAccessible(true);
this.childrenField = field;
break;
}
}
if (this.childrenField == null) {
throw new TreeConverterException(t.getClass().getTypeName() + "@TreeConverterChildren is not found");
}
}
try {
@SuppressWarnings("unchecked")
List<T> children = (List<T>) this.childrenField.get(t);
if (children == null) {
children = new ArrayList<>();
this.childrenField.set(t, children);
}
return children;
} catch (IllegalArgumentException | IllegalAccessException e) {
throw new TreeConverterException(t.getClass().getTypeName() + "@TreeConverterChildren Reflect exception", e);
}
}
});
}
public static List<Map<String, Object>> list2Tree(List<Map<String, Object>> list, String idName, String parentIdName) {
return list2Tree(list, idName, parentIdName, "children");
}
public static List<Map<String, Object>> list2Tree(List<Map<String, Object>> list, final String idName, final String parentIdName, final String childrenName) {
return list2Tree(list, new List2TreeConverterBean<Map<String, Object>>() {
@Override
public Object getId(Map<String, Object> t) {
return t.get(idName);
}
@Override
public Object getParentId(Map<String, Object> t) {
return t.get(parentIdName);
}
@SuppressWarnings("unchecked")
@Override
public List<Map<String, Object>> getChildren(Map<String, Object> t) {
List<Map<String, Object>> children = (List<Map<String, Object>>) t.get(childrenName);
if (children == null) {
children = new ArrayList<Map<String, Object>>();
t.put(childrenName, children);
}
return children;
}
});
}
public static <T> List<T> list2Tree(List<T> list, List2TreeConverterBean<T> bean) {
int len = list.size();
if (len <= 1) {
return list;
}
List<T> temp = new ArrayList<>();
Map<Object, T> map = new HashMap<>(new Double(len / 0.75).intValue() + 1);
for (T item : list) {
map.put(bean.getId(item), item);
}
for (T item : list) {
Object parentId = bean.getParentId(item);
if (parentId == null) {
temp.add(item);
continue;
}
T t = map.get(parentId);
if (t == null) {
temp.add(item);
continue;
}
bean.getChildren(t).add(item);
}
return temp;
}
/**
* 设置默认level level从1开始, 作用于@TreeConverterLevel注释的字段
* @param <T>
* @param tree
* @return
*/
public static <T> List<T> tree2List(List<T> tree) {
return tree2List(tree, (LevelStrategy<T>) null);
}
/**
* 自定义level策略, 作用于@TreeConverterLevel注释的字段
* @param <T>
* @param tree
* @param levelStrategy
* @return
*/
public static <T> List<T> tree2List(List<T> tree, LevelStrategy<T> levelStrategy) {
return tree2List(tree, new Tree2ListConverterBean<T>() {
private Field childrenField;
private Field levelField;
private boolean hasLevel = true;
@SuppressWarnings("unchecked")
@Override
public List<T> getChildren(T t) {
if (this.childrenField == null) {
Field[] fields = t.getClass().getDeclaredFields();
TreeConverterChildren converterChildren = null;
for (Field field : fields) {
converterChildren = field.getAnnotation(TreeConverterChildren.class);
if (converterChildren != null) {
field.setAccessible(true);
this.childrenField = field;
break;
}
}
if (this.childrenField == null) {
throw new TreeConverterException(t.getClass().getTypeName() + "@TreeConverterChildren is not found");
}
}
try {
return (List<T>) this.childrenField.get(t);
} catch (IllegalArgumentException | IllegalAccessException e) {
throw new TreeConverterException(t.getClass().getTypeName() + "@TreeConverterChildren Reflect exception", e);
}
}
@Override
public void nullChildren(T t) {
if (this.childrenField == null) {
Field[] fields = t.getClass().getDeclaredFields();
TreeConverterChildren converterChildren = null;
for (Field field : fields) {
converterChildren = field.getAnnotation(TreeConverterChildren.class);
if (converterChildren != null) {
field.setAccessible(true);
this.childrenField = field;
break;
}
}
if (this.childrenField == null) {
throw new TreeConverterException(t.getClass().getTypeName() + "@TreeConverterChildren is not found");
}
}
try {
this.childrenField.set(t, null);
} catch (IllegalArgumentException | IllegalAccessException e) {
throw new TreeConverterException(t.getClass().getTypeName() + "@TreeConverterChildren Reflect exception", e);
}
}
@Override
public void setLevel(T t, int level) {
if (this.hasLevel && this.levelField == null) {
Field[] fields = t.getClass().getDeclaredFields();
TreeConverterLevel converterLevel = null;
for (Field field : fields) {
converterLevel = field.getAnnotation(TreeConverterLevel.class);
if (converterLevel != null) {
field.setAccessible(true);
this.levelField = field;
break;
}
}
if (this.levelField == null) {
this.hasLevel = false;
}
}
if (this.levelField != null) {
try {
this.levelField.set(t, levelStrategy == null ? level : levelStrategy.getLevel(level, t));
} catch (IllegalArgumentException | IllegalAccessException e) {
throw new TreeConverterException(t.getClass().getTypeName() + "@TreeConverterLevel Reflect exception", e);
}
}
}
});
}
/**
* 忽略level
* @param tree
* @param childrenName
* @return
*/
public static List<Map<String, Object>> tree2List(List<Map<String, Object>> tree, String childrenName) {
return tree2List(tree, childrenName, null);
}
/**
* 当levelName 为 null 或 空字符串时忽略level
* @param tree
* @param childrenName
* @param levelName
* @return
*/
public static List<Map<String, Object>> tree2List(List<Map<String, Object>> tree, String childrenName, String levelName) {
return tree2List(tree, childrenName, levelName, null);
}
public static List<Map<String, Object>> tree2List(List<Map<String, Object>> tree, final String childrenName, final String levelName, LevelStrategy<Map<String, Object>> levelStrategy) {
return tree2List(tree, new Tree2ListConverterBean<Map<String, Object>>() {
@SuppressWarnings("unchecked")
@Override
public List<Map<String, Object>> getChildren(Map<String, Object> t) {
return (List<Map<String, Object>>) t.get(childrenName);
}
@Override
public void nullChildren(Map<String, Object> t) {
t.remove(childrenName);
}
@Override
public void setLevel(Map<String, Object> t, int level) {
if (levelName == null || levelName.isEmpty()) {
return;
}
t.put(levelName, levelStrategy == null ? level : levelStrategy.getLevel(level, t));
}
});
}
public static <T> List<T> tree2List(List<T> tree, Tree2ListConverterBean<T> bean) {
List<T> list = new ArrayList<T>();
if (tree.isEmpty()) {
return list;
}
T t = null;
int len = tree.size();
for(int i = 0; i < len; i++) {
t = tree.get(i);
bean.setLevel(t, 1);
list.add(t);
pushChild(list, t, 2, bean);
}
return list;
}
private static <T> void pushChild(List<T> list, T t, int level, Tree2ListConverterBean<T> bean) {
List<T> children = bean.getChildren(t);
if (children == null ) {
return;
} else if (children.isEmpty()) {
bean.nullChildren(t);
return;
}
bean.nullChildren(t);
T t2 = null;
for (int i = 0, len = children.size(); i < len; i++) {
t2 = children.get(i);
bean.setLevel(t2, level);
list.add(t2);
pushChild(list, t2, level + 1, bean);
}
}
}
使用示例
实体类
DepartmentBO.class
import java.util.List;
public class DepartmentBO {
@TreeConverterId
private String id;
@TreeConverterParent
private String parent;
private String orgcode;
@TreeConverterLevel
private Integer levelflg;
@TreeConverterChildren
private List<DepartmentBO> list;
public DepartmentBO() {}
public DepartmentBO(String id, String parent, String orgcode) {
this.id = id;
this.parent = parent;
this.orgcode = orgcode;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getParent() {
return parent;
}
public void setParent(String parent) {
this.parent = parent;
}
public String getOrgcode() {
return orgcode;
}
public void setOrgcode(String orgcode) {
this.orgcode = orgcode;
}
public Integer getLevelflg() {
return levelflg;
}
public void setLevelflg(Integer levelflg) {
this.levelflg = levelflg;
}
public List<DepartmentBO> getList() {
return list;
}
public void setList(List<DepartmentBO> list) {
this.list = list;
}
@Override
public String toString() {
return "DepartmentBO [id=" + id + ", parent=" + parent + ", orgcode=" + orgcode + ", levelflg=" + levelflg
+ ", list=" + list + "]";
}
}
Department2BO.class
import java.util.List;
public class Department2BO {
@TreeConverterId
private int id;
@TreeConverterParent
private int parent;
private String orgcode;
@TreeConverterLevel
private Integer levelflg;
@TreeConverterChildren
private List<DepartmentBO> list;
public Department2BO() {}
public Department2BO(int id, int parent, String orgcode) {
this.id = id;
this.parent = parent;
this.orgcode = orgcode;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getParent() {
return parent;
}
public void setParent(int parent) {
this.parent = parent;
}
public String getOrgcode() {
return orgcode;
}
public void setOrgcode(String orgcode) {
this.orgcode = orgcode;
}
public Integer getLevelflg() {
return levelflg;
}
public void setLevelflg(Integer levelflg) {
this.levelflg = levelflg;
}
public List<DepartmentBO> getList() {
return list;
}
public void setList(List<DepartmentBO> list) {
this.list = list;
}
@Override
public String toString() {
return "Department2BO [id=" + id + ", parent=" + parent + ", orgcode=" + orgcode + ", levelflg=" + levelflg
+ ", list=" + list + "]";
}
}
测试类
TreeConverterTest.class
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TreeConverterTest {
public static void main(String[] args) {
list2tree1();
list2tree2();
list2tree3();
list2tree4();
list2tree5();
tree2list1();
tree2list2();
tree2list3();
tree2list4();
tree2list5();
}
public static void list2tree1 () {
List<DepartmentBO> list = new ArrayList<>();
list.add(new DepartmentBO("1001", "1002", "qq1001"));
list.add(new DepartmentBO("1002", "0", "qq1002"));
list.add(new DepartmentBO("1003", "0", "cc1003"));
list.add(new DepartmentBO("1004", "1003", "cc1004"));
list.add(new DepartmentBO("1005", "1004", "cc1005"));
list.add(new DepartmentBO("1006", "1004", "cc1006"));
System.out.println("----------list2tree1");
System.out.println(list);
list = TreeConverter.list2Tree(list);
System.out.println(list);
}
public static void list2tree2 () {
List<DepartmentBO> list = new ArrayList<>();
list.add(new DepartmentBO("1001", "1002", "qq1001"));
list.add(new DepartmentBO("1002", "0", "qq1002"));
list.add(new DepartmentBO("1003", "0", "cc1003"));
list.add(new DepartmentBO("1004", "1003", "cc1004"));
list.add(new DepartmentBO("1005", "1004", "cc1005"));
list.add(new DepartmentBO("1006", "1004", "cc1006"));
System.out.println("---------list2tree2");
System.out.println(list);
list = TreeConverter.list2Tree(list, new List2TreeConverterBean<DepartmentBO>() {
@Override
public Object getId(DepartmentBO t) {
return t.getId();
}
@Override
public Object getParentId(DepartmentBO t) {
return t.getParent();
}
@Override
public List<DepartmentBO> getChildren(DepartmentBO t) {
List<DepartmentBO> children = t.getList();
if (children == null) {
children = new ArrayList<DepartmentBO>();
t.setList(children);
}
return children;
}
});
System.out.println(list);
}
public static void list2tree3 () {
List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("id", 1001);
map1.put("parent", 1002);
map1.put("name", "qqq1001");
list.add(map1);
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("id", 1002);
map2.put("parent", 0);
map2.put("name", "qqq1002");
list.add(map2);
Map<String, Object> map3 = new HashMap<String, Object>();
map3.put("id", 1003);
map3.put("parent", 0);
map3.put("name", "rhhsh1003");
list.add(map3);
Map<String, Object> map4 = new HashMap<String, Object>();
map4.put("id", 1004);
map4.put("parent", 1003);
map4.put("name", "rhhsh1004");
list.add(map4);
Map<String, Object> map5 = new HashMap<String, Object>();
map5.put("id", 1005);
map5.put("parent", 1004);
map5.put("name", "rhhsh1005");
list.add(map5);
Map<String, Object> map6 = new HashMap<String, Object>();
map6.put("id", 1006);
map6.put("parent", 1004);
map6.put("name", "rhhsh1006");
list.add(map6);
System.out.println("---------list2tree3");
System.out.println(list);
list = TreeConverter.list2Tree(list, "id", "parent");
// list = TreeConverter.list2Tree(list, "id", "parent", "children");
System.out.println(list);
}
public static void list2tree4 () {
List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("id", 1001);
map1.put("parent", 1002);
map1.put("name", "qqq1001");
list.add(map1);
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("id", 1002);
map2.put("parent", 0);
map2.put("name", "qqq1002");
list.add(map2);
Map<String, Object> map3 = new HashMap<String, Object>();
map3.put("id", 1003);
map3.put("parent", 0);
map3.put("name", "rhhsh1003");
list.add(map3);
Map<String, Object> map4 = new HashMap<String, Object>();
map4.put("id", 1004);
map4.put("parent", 1003);
map4.put("name", "rhhsh1004");
list.add(map4);
Map<String, Object> map5 = new HashMap<String, Object>();
map5.put("id", 1005);
map5.put("parent", 1004);
map5.put("name", "rhhsh1005");
list.add(map5);
Map<String, Object> map6 = new HashMap<String, Object>();
map6.put("id", 1006);
map6.put("parent", 1004);
map6.put("name", "rhhsh1006");
list.add(map6);
System.out.println("---------list2tree4");
System.out.println(list);
list = TreeConverter.list2Tree(list, new List2TreeConverterBean<Map<String, Object>>() {
@Override
public Object getId(Map<String, Object> t) {
return t.get("id");
}
@Override
public Object getParentId(Map<String, Object> t) {
return t.get("parent");
}
@Override
public List<Map<String, Object>> getChildren(Map<String, Object> t) {
@SuppressWarnings("unchecked")
List<Map<String, Object>> children = (List<Map<String, Object>>)t.get("children");
if (children == null) {
children = new ArrayList<Map<String, Object>>();
t.put("children", children);
}
return children;
}
});
System.out.println(list);
System.out.println();
}
public static void list2tree5 () {
List<Department2BO> list = new ArrayList<>();
list.add(new Department2BO(1001, 1002, "qq1001"));
list.add(new Department2BO(1002, 0, "qq1002"));
list.add(new Department2BO(1003, 0, "cc1003"));
list.add(new Department2BO(1004, 1003, "cc1004"));
list.add(new Department2BO(1005, 1004, "cc1005"));
list.add(new Department2BO(1006, 1004, "cc1006"));
System.out.println("---------list2tree5");
System.out.println(list);
list = TreeConverter.list2Tree(list);
System.out.println(list);
System.out.println();
System.out.println();
}
private static void tree2list1() {
List<DepartmentBO> list = new ArrayList<>();
list.add(new DepartmentBO("1001", "1002", "qq1001"));
list.add(new DepartmentBO("1002", "0", "qq1002"));
list.add(new DepartmentBO("1003", "0", "cc1003"));
list.add(new DepartmentBO("1004", "1003", "cc1004"));
list.add(new DepartmentBO("1005", "1004", "cc1005"));
list.add(new DepartmentBO("1006", "1004", "cc1006"));
list = TreeConverter.list2Tree(list);
System.out.println("---------tree2list1");
System.out.println(list);
list = TreeConverter.tree2List(list, new Tree2ListConverterBean<DepartmentBO>() {
@Override
public List<DepartmentBO> getChildren(DepartmentBO t) {
return t.getList();
}
@Override
public void nullChildren(DepartmentBO t) {
t.setList(null);
}
@Override
public void setLevel(DepartmentBO t, int level) {
t.setLevelflg(level);
}
});
System.out.println(list);
}
private static void tree2list2() {
List<DepartmentBO> list = new ArrayList<>();
list.add(new DepartmentBO("1001", "1002", "qq1001"));
list.add(new DepartmentBO("1002", "0", "qq1002"));
list.add(new DepartmentBO("1003", "0", "cc1003"));
list.add(new DepartmentBO("1004", "1003", "cc1004"));
list.add(new DepartmentBO("1005", "1004", "cc1005"));
list.add(new DepartmentBO("1006", "1004", "cc1006"));
list = TreeConverter.list2Tree(list);
System.out.println("---------tree2list2");
System.out.println(list);
list = TreeConverter.tree2List(list);
System.out.println(list);
}
private static void tree2list3() {
List<DepartmentBO> list = new ArrayList<>();
list.add(new DepartmentBO("1001", "1002", "qq1001"));
list.add(new DepartmentBO("1002", "0", "qq1002"));
list.add(new DepartmentBO("1003", "0", "cc1003"));
list.add(new DepartmentBO("1004", "1003", "cc1004"));
list.add(new DepartmentBO("1005", "1004", "cc1005"));
list.add(new DepartmentBO("1006", "1004", "cc1006"));
list = TreeConverter.list2Tree(list);
System.out.println("---------tree2list3");
System.out.println(list);
list = TreeConverter.tree2List(list, new LevelStrategy<DepartmentBO>() {
@Override
public Object getLevel(int level, DepartmentBO t) {
return level * 10;
}
});
System.out.println(list);
}
private static void tree2list4() {
List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("id", 1001);
map1.put("parent", 1002);
map1.put("name", "qqq1001");
list.add(map1);
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("id", 1002);
map2.put("parent", 0);
map2.put("name", "qqq1002");
list.add(map2);
Map<String, Object> map3 = new HashMap<String, Object>();
map3.put("id", 1003);
map3.put("parent", 0);
map3.put("name", "rhhsh1003");
list.add(map3);
Map<String, Object> map4 = new HashMap<String, Object>();
map4.put("id", 1004);
map4.put("parent", 1003);
map4.put("name", "rhhsh1004");
list.add(map4);
Map<String, Object> map5 = new HashMap<String, Object>();
map5.put("id", 1005);
map5.put("parent", 1004);
map5.put("name", "rhhsh1005");
list.add(map5);
Map<String, Object> map6 = new HashMap<String, Object>();
map6.put("id", 1006);
map6.put("parent", 1004);
map6.put("name", "rhhsh1006");
list.add(map6);
list = TreeConverter.list2Tree(list, "id", "parent", "children");
System.out.println("---------tree2list4");
System.out.println(list);
// list = TreeConverter.tree2List(list, "children");
// list = TreeConverter.tree2List(list, "children", "level");
list = TreeConverter.tree2List(list, "children", "level", new LevelStrategy<Map<String, Object>>() {
@Override
public Object getLevel(int level, Map<String, Object> t) {
return "level" + level;
}
});
System.out.println(list);
}
private static void tree2list5() {
List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("id", 1001);
map1.put("parent", 1002);
map1.put("name", "qqq1001");
list.add(map1);
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("id", 1002);
map2.put("parent", 0);
map2.put("name", "qqq1002");
list.add(map2);
Map<String, Object> map3 = new HashMap<String, Object>();
map3.put("id", 1003);
map3.put("parent", 0);
map3.put("name", "rhhsh1003");
list.add(map3);
Map<String, Object> map4 = new HashMap<String, Object>();
map4.put("id", 1004);
map4.put("parent", 1003);
map4.put("name", "rhhsh1004");
list.add(map4);
Map<String, Object> map5 = new HashMap<String, Object>();
map5.put("id", 1005);
map5.put("parent", 1004);
map5.put("name", "rhhsh1005");
list.add(map5);
Map<String, Object> map6 = new HashMap<String, Object>();
map6.put("id", 1006);
map6.put("parent", 1004);
map6.put("name", "rhhsh1006");
list.add(map6);
list = TreeConverter.list2Tree(list, "id", "parent", "children");
System.out.println("-----------tree2list5");
System.out.println(list);
list = TreeConverter.tree2List(list, new Tree2ListConverterBean<Map<String, Object>>() {
@SuppressWarnings("unchecked")
@Override
public List<Map<String, Object>> getChildren(Map<String, Object> t) {
return (List<Map<String, Object>>) t.get("children");
}
@Override
public void nullChildren(Map<String, Object> t) {
t.remove("children");
}
@Override
public void setLevel(Map<String, Object> t, int level) {
//t.put("levelflg", level - 1);
t.put("levelflg", "level" + level);
}
});
System.out.println(list);
}
}
打印结果
----------list2tree1
[DepartmentBO [id=1001, parent=1002, orgcode=qq1001, levelflg=null, list=null], DepartmentBO [id=1002, parent=0, orgcode=qq1002, levelflg=null, list=null], DepartmentBO [id=1003, parent=0, orgcode=cc1003, levelflg=null, list=null], DepartmentBO [id=1004, parent=1003, orgcode=cc1004, levelflg=null, list=null], DepartmentBO [id=1005, parent=1004, orgcode=cc1005, levelflg=null, list=null], DepartmentBO [id=1006, parent=1004, orgcode=cc1006, levelflg=null, list=null]]
[DepartmentBO [id=1002, parent=0, orgcode=qq1002, levelflg=null, list=[DepartmentBO [id=1001, parent=1002, orgcode=qq1001, levelflg=null, list=null]]], DepartmentBO [id=1003, parent=0, orgcode=cc1003, levelflg=null, list=[DepartmentBO [id=1004, parent=1003, orgcode=cc1004, levelflg=null, list=[DepartmentBO [id=1005, parent=1004, orgcode=cc1005, levelflg=null, list=null], DepartmentBO [id=1006, parent=1004, orgcode=cc1006, levelflg=null, list=null]]]]]]
---------list2tree2
[DepartmentBO [id=1001, parent=1002, orgcode=qq1001, levelflg=null, list=null], DepartmentBO [id=1002, parent=0, orgcode=qq1002, levelflg=null, list=null], DepartmentBO [id=1003, parent=0, orgcode=cc1003, levelflg=null, list=null], DepartmentBO [id=1004, parent=1003, orgcode=cc1004, levelflg=null, list=null], DepartmentBO [id=1005, parent=1004, orgcode=cc1005, levelflg=null, list=null], DepartmentBO [id=1006, parent=1004, orgcode=cc1006, levelflg=null, list=null]]
[DepartmentBO [id=1002, parent=0, orgcode=qq1002, levelflg=null, list=[DepartmentBO [id=1001, parent=1002, orgcode=qq1001, levelflg=null, list=null]]], DepartmentBO [id=1003, parent=0, orgcode=cc1003, levelflg=null, list=[DepartmentBO [id=1004, parent=1003, orgcode=cc1004, levelflg=null, list=[DepartmentBO [id=1005, parent=1004, orgcode=cc1005, levelflg=null, list=null], DepartmentBO [id=1006, parent=1004, orgcode=cc1006, levelflg=null, list=null]]]]]]
---------list2tree3
[{parent=1002, name=qqq1001, id=1001}, {parent=0, name=qqq1002, id=1002}, {parent=0, name=rhhsh1003, id=1003}, {parent=1003, name=rhhsh1004, id=1004}, {parent=1004, name=rhhsh1005, id=1005}, {parent=1004, name=rhhsh1006, id=1006}]
[{parent=0, children=[{parent=1002, name=qqq1001, id=1001}], name=qqq1002, id=1002}, {parent=0, children=[{parent=1003, children=[{parent=1004, name=rhhsh1005, id=1005}, {parent=1004, name=rhhsh1006, id=1006}], name=rhhsh1004, id=1004}], name=rhhsh1003, id=1003}]
---------list2tree4
[{parent=1002, name=qqq1001, id=1001}, {parent=0, name=qqq1002, id=1002}, {parent=0, name=rhhsh1003, id=1003}, {parent=1003, name=rhhsh1004, id=1004}, {parent=1004, name=rhhsh1005, id=1005}, {parent=1004, name=rhhsh1006, id=1006}]
[{parent=0, children=[{parent=1002, name=qqq1001, id=1001}], name=qqq1002, id=1002}, {parent=0, children=[{parent=1003, children=[{parent=1004, name=rhhsh1005, id=1005}, {parent=1004, name=rhhsh1006, id=1006}], name=rhhsh1004, id=1004}], name=rhhsh1003, id=1003}]
---------list2tree5
[Department2BO [id=1001, parent=1002, orgcode=qq1001, levelflg=null, list=null], Department2BO [id=1002, parent=0, orgcode=qq1002, levelflg=null, list=null], Department2BO [id=1003, parent=0, orgcode=cc1003, levelflg=null, list=null], Department2BO [id=1004, parent=1003, orgcode=cc1004, levelflg=null, list=null], Department2BO [id=1005, parent=1004, orgcode=cc1005, levelflg=null, list=null], Department2BO [id=1006, parent=1004, orgcode=cc1006, levelflg=null, list=null]]
[Department2BO [id=1002, parent=0, orgcode=qq1002, levelflg=null, list=[Department2BO [id=1001, parent=1002, orgcode=qq1001, levelflg=null, list=null]]], Department2BO [id=1003, parent=0, orgcode=cc1003, levelflg=null, list=[Department2BO [id=1004, parent=1003, orgcode=cc1004, levelflg=null, list=[Department2BO [id=1005, parent=1004, orgcode=cc1005, levelflg=null, list=null], Department2BO [id=1006, parent=1004, orgcode=cc1006, levelflg=null, list=null]]]]]]
---------tree2list1
[DepartmentBO [id=1002, parent=0, orgcode=qq1002, levelflg=null, list=[DepartmentBO [id=1001, parent=1002, orgcode=qq1001, levelflg=null, list=null]]], DepartmentBO [id=1003, parent=0, orgcode=cc1003, levelflg=null, list=[DepartmentBO [id=1004, parent=1003, orgcode=cc1004, levelflg=null, list=[DepartmentBO [id=1005, parent=1004, orgcode=cc1005, levelflg=null, list=null], DepartmentBO [id=1006, parent=1004, orgcode=cc1006, levelflg=null, list=null]]]]]]
[DepartmentBO [id=1002, parent=0, orgcode=qq1002, levelflg=1, list=null], DepartmentBO [id=1001, parent=1002, orgcode=qq1001, levelflg=2, list=null], DepartmentBO [id=1003, parent=0, orgcode=cc1003, levelflg=1, list=null], DepartmentBO [id=1004, parent=1003, orgcode=cc1004, levelflg=2, list=null], DepartmentBO [id=1005, parent=1004, orgcode=cc1005, levelflg=3, list=null], DepartmentBO [id=1006, parent=1004, orgcode=cc1006, levelflg=3, list=null]]
---------tree2list2
[DepartmentBO [id=1002, parent=0, orgcode=qq1002, levelflg=null, list=[DepartmentBO [id=1001, parent=1002, orgcode=qq1001, levelflg=null, list=null]]], DepartmentBO [id=1003, parent=0, orgcode=cc1003, levelflg=null, list=[DepartmentBO [id=1004, parent=1003, orgcode=cc1004, levelflg=null, list=[DepartmentBO [id=1005, parent=1004, orgcode=cc1005, levelflg=null, list=null], DepartmentBO [id=1006, parent=1004, orgcode=cc1006, levelflg=null, list=null]]]]]]
[DepartmentBO [id=1002, parent=0, orgcode=qq1002, levelflg=1, list=null], DepartmentBO [id=1001, parent=1002, orgcode=qq1001, levelflg=2, list=null], DepartmentBO [id=1003, parent=0, orgcode=cc1003, levelflg=1, list=null], DepartmentBO [id=1004, parent=1003, orgcode=cc1004, levelflg=2, list=null], DepartmentBO [id=1005, parent=1004, orgcode=cc1005, levelflg=3, list=null], DepartmentBO [id=1006, parent=1004, orgcode=cc1006, levelflg=3, list=null]]
---------tree2list3
[DepartmentBO [id=1002, parent=0, orgcode=qq1002, levelflg=null, list=[DepartmentBO [id=1001, parent=1002, orgcode=qq1001, levelflg=null, list=null]]], DepartmentBO [id=1003, parent=0, orgcode=cc1003, levelflg=null, list=[DepartmentBO [id=1004, parent=1003, orgcode=cc1004, levelflg=null, list=[DepartmentBO [id=1005, parent=1004, orgcode=cc1005, levelflg=null, list=null], DepartmentBO [id=1006, parent=1004, orgcode=cc1006, levelflg=null, list=null]]]]]]
[DepartmentBO [id=1002, parent=0, orgcode=qq1002, levelflg=10, list=null], DepartmentBO [id=1001, parent=1002, orgcode=qq1001, levelflg=20, list=null], DepartmentBO [id=1003, parent=0, orgcode=cc1003, levelflg=10, list=null], DepartmentBO [id=1004, parent=1003, orgcode=cc1004, levelflg=20, list=null], DepartmentBO [id=1005, parent=1004, orgcode=cc1005, levelflg=30, list=null], DepartmentBO [id=1006, parent=1004, orgcode=cc1006, levelflg=30, list=null]]
---------tree2list4
[{parent=0, children=[{parent=1002, name=qqq1001, id=1001}], name=qqq1002, id=1002}, {parent=0, children=[{parent=1003, children=[{parent=1004, name=rhhsh1005, id=1005}, {parent=1004, name=rhhsh1006, id=1006}], name=rhhsh1004, id=1004}], name=rhhsh1003, id=1003}]
[{parent=0, level=level1, name=qqq1002, id=1002}, {parent=1002, level=level2, name=qqq1001, id=1001}, {parent=0, level=level1, name=rhhsh1003, id=1003}, {parent=1003, level=level2, name=rhhsh1004, id=1004}, {parent=1004, level=level3, name=rhhsh1005, id=1005}, {parent=1004, level=level3, name=rhhsh1006, id=1006}]
-----------tree2list5
[{parent=0, children=[{parent=1002, name=qqq1001, id=1001}], name=qqq1002, id=1002}, {parent=0, children=[{parent=1003, children=[{parent=1004, name=rhhsh1005, id=1005}, {parent=1004, name=rhhsh1006, id=1006}], name=rhhsh1004, id=1004}], name=rhhsh1003, id=1003}]
[{parent=0, name=qqq1002, id=1002, levelflg=level1}, {parent=1002, name=qqq1001, id=1001, levelflg=level2}, {parent=0, name=rhhsh1003, id=1003, levelflg=level1}, {parent=1003, name=rhhsh1004, id=1004, levelflg=level2}, {parent=1004, name=rhhsh1005, id=1005, levelflg=level3}, {parent=1004, name=rhhsh1006, id=1006, levelflg=level3}]
注意
方法的返回值才是转换后的结果