1 业务场景
假设有两个平台,都有员工类,每个员工都有其下属员工,两个平台的员工实体类如下:
- 平台A的员工实体:StaffA.java
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 员工类
* Created by Yinlu on 2024/7/20
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class StaffA {
/**
* 员工姓名
*/
private String name;
/**
* 员工编号
*/
private String no;
/**
* 上级编号
*/
private String parentNo;
/**
* 下属员工:这里是为了拷贝设置的属性(数据库中可能不会有该字段,这里是为了其他业务添加的)
*/
private List<Staff> underling;
public Staff(String name, String no, String parentNo) {
this.name = name;
this.no = no;
this.parentNo = parentNo;
}
}
- StaffB实体:StaffB.java
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 树形结构的员工关系,顶层是CEO
* Created by Yinlu on 2024/7/20
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StaffB {
/**
* 姓名
*/
private String name;
/**
* 下属
*/
private List<StaffTree> underling;
}
需要将StaffA中的内容拷贝至StaffB中,使用BeanUtils拷贝时不会拷贝List类型,因此需要递归去拷贝。
拷贝
// 拷贝内容至另一个类似的类中
public static StaffB copyContent(StaffA source) {
StaffB target = new StaffB();
target.setName(source.getName());
List<StaffA> sourceUnderling = source.getUnderling();
// 子节点递归拷贝
if (sourceUnderling != null) {
List<StaffB> children = new ArrayList<>();
for (StaffA staff : sourceUnderling) {
children.add(copyContent(staff));
}
target.setUnderling(children);
}
return target;
}