
两种树形结构的类例如下,层级不定
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 KagurazakaNyaa 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 img src="http://www.v2ex.com/static/img/heart_20250818.png?v=c3415183a0b3e9ab1576251be69d7d6d" width="14" align="absmiddle" alt="" /> 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; } (莫名回复了) |