
两种树形结构的类例如下,层级不定
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 ordero; private List<B> children; } 目前代码写的转化逻辑是,先扁平化树为 List ,转化,再构建树。感觉这种方式有点笨,有其他比较好的方式吗(除了 json 序列化 /反序列化)
1 KagurazakaNyaa Sep 5, 2022 不喜欢 json 可以试试 yaml |
2 sadfQED2 Sep 5, 2022 via Android 直接递归遍历?如果树比较大的话循环遍历? |
3 zhongpingjing OP @sadfQED2 试了层序遍历树,没办法边遍历边转化出另一课树,只能转化出 2 层,3 层以上就丢失了,不知道是不是写法有问题 |
4 dcsuibian Sep 5, 2022 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 Sep 5, 2022 循环遍历就行了 |
7 tuiL2 Sep 5, 2022 via Android 简单点的话,node 再实现一个 copy 方法。 |
8 ianEros Sep 5, 2022 递归啊 如果有 children 把 children 传进来获取返回的 B |
9 zhongpingjing OP @dcsuibian 谢大佬。。思考半天,结果大佬几行代码就解决了 |
10 irytu Sep 6, 2022 via iPhone leetcode 是不是有类似的题 虽然可能只是二叉树 但是同样适用于 k 叉… |
11 tramm Sep 6, 2022 直接工具类 copy 啊. 例如 Hutool 的 Beanutil 之类的 |
12 summerLast Sep 6, 2022 |
13 summerLast Sep 6, 2022 迭代 或 mapstruct 扁平化也挺好的 迭代的思路 B convert(A a){ b.setId(a.code) a.children.forEach(o=>b.children.add(convert(o))) } |
14 summerLast Sep 6, 2022 迭代 或 mapstruct 扁平化也挺好的 迭代的思路 B convert(A a){ B b = new B() b.setId(a.code) a.children.forEach(o->b.children.add(convert(o))) returen b; } (莫名回复了) |