两种树形结构的类例如下,层级不定
public class A {
private String code;
private String parentCode;
private String name;
private Integer sequence;
private List<A> children;
}
public class B {
private Long id;
private String name;
private Long parentId;
private Long orderNo;
private List<B> children;
}
目前代码写的转化逻辑是,先扁平化树为 List ,转化,再构建树。感觉这种方式有点笨,有其他比较好的方式吗(除了 json 序列化 /反序列化)
1
XiLingHost 2022-09-05 19:13:42 +08:00
不喜欢 json 可以试试 yaml
|
2
sadfQED2 2022-09-05 19:14:35 +08:00 via Android
直接递归遍历?如果树比较大的话循环遍历?
|
3
zhongpingjing OP @sadfQED2 试了层序遍历树,没办法边遍历边转化出另一课树,只能转化出 2 层,3 层以上就丢失了,不知道是不是写法有问题
|
4
dcsuibian 2022-09-05 19:18:01 +08:00 3
public Tree copy(){
Tree tree = new Tree(); tree.id = id; for(Tree child : children){ tree.children.add(child.copy()); } return tree; } |
5
zhongpingjing OP @XiLingHost 倒不是不喜欢,主要是想通过一次遍历来转化
|
6
pxiphx891 2022-09-05 19:25:16 +08:00
循环遍历就行了
|
7
tuiL2 2022-09-05 19:34:26 +08:00 via Android
简单点的话,node 再实现一个 copy 方法。
|
8
ianEros 2022-09-05 19:48:19 +08:00
递归啊 如果有 children 把 children 传进来获取返回的 B
|
9
zhongpingjing OP @dcsuibian 谢大佬。。思考半天,结果大佬几行代码就解决了
|
10
irytu 2022-09-06 06:21:25 +08:00 via iPhone
leetcode 是不是有类似的题 虽然可能只是二叉树 但是同样适用于 k 叉…
|
11
tramm 2022-09-06 08:22:32 +08:00
直接工具类 copy 啊.
例如 Hutool 的 Beanutil 之类的 |
12
summerLast 2022-09-06 09:32:41 +08:00
|
13
summerLast 2022-09-06 09:36:29 +08:00
迭代 或 mapstruct
扁平化也挺好的 迭代的思路 B convert(A a){ b.setId(a.code) a.children.forEach(o=>b.children.add(convert(o))) } |
14
summerLast 2022-09-06 09:38:48 +08:00
迭代 或 mapstruct
扁平化也挺好的 迭代的思路 B convert(A a){ B b = new B() b.setId(a.code) a.children.forEach(o->b.children.add(convert(o))) returen b; } (莫名回复了) |