带子节点的对象拷贝【Java实现】

对象之间的拷贝

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;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值