树形结构的数据应该如何拷贝

2022-09-05 19:08:31 +08:00
 zhongpingjing

两种树形结构的类例如下,层级不定

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 序列化 /反序列化)

1908 次点击
所在节点    Java
14 条回复
XiLingHost
2022-09-05 19:13:42 +08:00
不喜欢 json 可以试试 yaml
sadfQED2
2022-09-05 19:14:35 +08:00
直接递归遍历?如果树比较大的话循环遍历?
zhongpingjing
2022-09-05 19:16:53 +08:00
@sadfQED2 试了层序遍历树,没办法边遍历边转化出另一课树,只能转化出 2 层,3 层以上就丢失了,不知道是不是写法有问题
dcsuibian
2022-09-05 19:18:01 +08:00
public Tree copy(){
Tree tree = new Tree();
tree.id = id;
for(Tree child : children){
tree.children.add(child.copy());
}
return tree;
}
zhongpingjing
2022-09-05 19:18:20 +08:00
@XiLingHost 倒不是不喜欢,主要是想通过一次遍历来转化
pxiphx891
2022-09-05 19:25:16 +08:00
循环遍历就行了
tuiL2
2022-09-05 19:34:26 +08:00
简单点的话,node 再实现一个 copy 方法。
ianEros
2022-09-05 19:48:19 +08:00
递归啊 如果有 children 把 children 传进来获取返回的 B
zhongpingjing
2022-09-05 19:53:53 +08:00
@dcsuibian 谢大佬。。思考半天,结果大佬几行代码就解决了
irytu
2022-09-06 06:21:25 +08:00
leetcode 是不是有类似的题 虽然可能只是二叉树 但是同样适用于 k 叉…
tramm
2022-09-06 08:22:32 +08:00
直接工具类 copy 啊.
例如 Hutool 的 Beanutil 之类的
summerLast
2022-09-06 09:32:41 +08:00
迭代 或 mapstruct
扁平化也挺好的

迭代的思路

B convert(A a){
b.setId(a.code)
b.setName(a.name)

}
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)))
}
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;
}

(莫名回复了)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/877892

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX