posts - 261,comments - 48,views - 91万

最简单的方式,使用JSON进行序列化

List<A> aList = new ArrayList<>();
String jsonStr = JSON.toJSONString(aList);
List<B> result = JSONArray.parseArray(jsonStr, B.class);

1. 直接使用 Springframework 下的工具 BeanUtils 可以进行简单对象的复制拷贝,具体使用方式如下:

类A的信息:

复制代码
import lombok.Data;
import lombok.ToString;

@Data
public class ClassA {
    private String name;
    private String email;
    private Integer age;
}
复制代码

类B的信息:

复制代码
import lombok.Data;
import lombok.ToString;

@Data
@ToString
public class ClassB {
    private String name;
    private String email;
}
复制代码

测试对象拷贝的案例:

复制代码
import org.springframework.beans.BeanUtils;

public class TestAB {
    public static void main(String[] args) {
        ClassA classA = new ClassA();
        classA.setAge(1);
        classA.setEmail("test@qq.com");
        classA.setName("test A");

        ClassB classB = new ClassB();
        BeanUtils.copyProperties(classA, classB, ClassB.class);
        System.out.println(classB);
    }
}
复制代码

输出结果:

ClassB(name=test A, email=test@qq.com)

2. 如果是对数组进行复制拷贝,则需要写一个 ListBeanUtils 工具类,如下所示:

复制代码
import java.util.List;
import java.util.Objects;

public class ListBeanUtils<T> {
    public void copyList(Object obj, List<T> list2, Class<T> classObj) {
        if ((!Objects.isNull(obj)) && (!Objects.isNull(list2))) {
            List list1 = (List) obj;
            list1.forEach(item -> {
                try {
                    T data = classObj.newInstance();
                    BeanUtils.copyProperties(item, data);
                    list2.add(data);
                } catch (InstantiationException e) {
                } catch (IllegalAccessException e) {
                }
            });
        }
    }
}
复制代码

测试数组拷贝的案例:

复制代码
import org.springframework.beans.BeanUtils;

import java.util.ArrayList;
import java.util.List;

public class TestAB {
    public static void main(String[] args) {
        ClassA classA = new ClassA();
        classA.setAge(1);
        classA.setEmail("test@qq.com");
        classA.setName("test A");

        ClassA classA1 = new ClassA();
        classA1.setAge(12);
        classA1.setEmail("test2@qq.com");
        classA1.setName("test A2");


        List<ClassA> aList = new ArrayList<>();
        aList.add(classA);
        aList.add(classA1);

        List<ClassB> bList = new ArrayList<>();
        ListBeanUtils<ClassB> utils = BeanUtils.instantiateClass(ListBeanUtils.class);
        utils.copyList(aList, bList, ClassB.class);

        System.out.println(bList);
    }
}
复制代码

输出结果:

[ClassB(name=test A, email=test@qq.com), ClassB(name=test A2, email=test2@qq.com)]

 

posted on   miaoying  阅读(694)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示