树节点定义
public class Node {
private String id;
private String name;
private String parentId;
private List<Node> children;
private String index;
}
树转嵌套集合
public static List<List<String>> flatten(List<Node> list, List<List<String>> values, List<String> temp) {
for (Node item : list) {
if (item.children == null || item.children.size() == 0) {
List<String> tmp = new ArrayList<>(temp);
tmp.add(item.name);
values.add(tmp);
} else {
temp.add(item.name);
flatten(item.children, values, temp);
}
}
temp.clear();
return values;
}
嵌套集合转数组
public static String[][] treeToArray(List<List<String>> flatten) {
int max = 0;
for (List<String> v : flatten) {
int size = v.size();
if (size >= max) {
max = size;
}
}
String[][] vs = new String[flatten.size()][max];
AtomicInteger index = new AtomicInteger(0);
flatten.forEach(v -> {
AtomicInteger index2 = new AtomicInteger(0);
v.forEach(v2 -> {
vs[index.get()][index2.get()] = v2;
index2.getAndIncrement();
});
index.getAndIncrement();
});
return vs;
}
二维数组转置
public static String[][] transpose(String[][] vs) {
String[][] vs2 = new String[vs[0].length][vs.length];
for (int i = 0; i < vs.length; i++) {
for (int j = 0; j < vs[i].length; j++) {
String value = vs[i][j];
if (Objects.isNull(value)) {
vs2[j][i] = vs[i][j - 1];
} else {
vs2[j][i] = value;
}
}
}
return vs2;
}