背景:现在有一个字段非常多大实体类1构成的集合一,另一个集二合中的实体类2需要集合一中的部分属性,所以需要进行属性的复制。

基础类一:作为复制的源头

import




    
 lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
    private String name;  // 姓名
    private Integer salary; // 薪资
    private Integer age; // 年龄
    private String sex; //性别
    private String area;  // 地区

基础类二:作为输出源

import lombok.Data;
@Data
public class Son {
    private String name;
    private Integer age;
    @Test
    public void copyEntity() throws Exception {
        List<Person> personList = new ArrayList<>();
        personList.add(new Person("Jack", 7000, 25, "male", "Washington"));
        personList.add(new Person("Lily", 7800, 21, "female", "Washington"));
        personList.add(new Person("Anni", 8200, 24, "female", "New York"));
        personList.add(new Person("Owen", 9500, 25, "male", "New York"));
        personList.add(new Person("Alisa", 7900, 26, "female", "New York"));
        List<Son> sonList = personList.stream().map(person -> {
            Son son = new Son();
            try {
                BeanUtils.copyProperties(son,person);
                /*son.setName(person.getName());
                son.setAge(person.getAge());*/
            } catch (Exception e) {
                e.printStackTrace();
            return son;
        }).collect(Collectors.toList());
        sonList.forEach(System.out::println);
import com.google.common.collect.Lists;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils;
import java.util.ArrayList;
import java.util.List;
public class CopyEntity {
     * @param input 输入集合
     * @param clzz  输出集合类型
     * @param <E>   输入集合类型
     * @param <T>   输出集合类型
     * @return 返回集合
    public static <E, T> List<T> convertList2List(List<E> input, Class<T> clzz) {
        List<T> output = Lists.newArrayList();
        if (!CollectionUtils.isEmpty(input)) {
            for (E source : input) {
                T target = BeanUtils.instantiate(clzz);
                BeanUtils.copyProperties(source, target);
                output.add(target);
        return output;
    public static void main(String[] args) {
        List<Person> personList = new ArrayList<>();
        personList.add(new Person("Jack", 7000, 25, "male", "Washington"));
        personList.add(new Person("Lily", 7800, 21, "female", "Washington"));
        personList.add(new Person("Anni", 8200, 24, "female", "New York"));
        personList.add(new Person("Owen", 9500, 25, "male", "New York"));
        personList.add(new Person("Alisa", 7900, 26, "female", "New York"));
        List<Son> sons = CopyEntity.convertList2List( personList,Son.class);
        sons.forEach(System.out::println);

注意:实现一和实现二所使用的是jar包不同,导致的影响是BeanUtils.copyProperties()该方法参数的位置不同。

第一个实现所用到的jar包:

    <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>1.9.3</version>
    </dependency>

第二个实现所用到的jar包:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>5.3.8</version>
        <scope>compile</scope>
    </dependency>
                                    问题:java一个list的内容复制给另一个list之后,去新的list进行操作的时候,原来的list也会发生变化
解决方案:直接采用“=”进行的复制属于浅层赋值,两者指向的使用一个地址,所以操作一个时另一个也会发生变化。如果不想出现这样的问题,建议采用深层赋值的方法.
解决方法:
List<String> list2= new ArrayList<>(list1);
List<String> list2= new ArrayList<&
                                    Java一个集合数据复制或赋值到另一个集合数据添加到一个集合
    public static void main(String[] args)throws Exception {
        List<String> list1 = new ArrayList<String>();
        list1.add("1");
        list1.add("2");
        list1.add("3");
        list1.add("5")
                                    public class ListUtils<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(
                                    文章目录Lsit数据复制问题1.1copy问题1.2怎么高效的复制1.3 回答
Lsit数据复制问题
这是由一道开放式面试题引发的文章,题目:加入内存足够大,一个集合有100万条数据,怎么高效的把集合的数据复制到另外一个集合
1.1copy问题
java 复制分为浅拷贝和深拷贝
如果考察浅拷贝:直接使用clone方法
System.out.println("测试开始时");...
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.util.CollectionUtils;
import java.beans.BeanInfo;
import java.beans.Intros.
                                    JavaList集合间的复制一、概览在这篇短文,我们将向你展示把一个List复制到另一个List去的不同方式以及在这个过程常见的错误。二、构造器copy一个List最简单方式就是使用构造器,这个构造器能接收一个集合参数。List copy = new ArrayList<>(list);由于使用这种方式的内部机制是:复制对象的引用而不是clone对象,所以对对象的每一个修改都将...
                                    在 Vue.js ,可以使用 JavaScript 数组的 slice() 方法复制一个数组的数据到另一个数组。例如:
let list1 = [1, 2, 3, 4, 5];
let list2 = list1.slice();
也可以使用 JavaScript 的 spread 运算符:
let list1 = [1, 2, 3, 4, 5];
let list2 = [...list1...