精华内容
下载资源
问答
  • 背景:现在有一个字段非常多大实体类1构成的集合一,另一个集二合中的实体类2需要集合一中的部分属性,所以需要进行属性的复制。 基础类一:作为复制的源头 import lombok.AllArgsConstructor; import lombok.Data; ...

    背景:现在有一个字段非常多大实体类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>
    
    展开全文
  • 文章目录问题描述:解决方案: 问题描述: 平时在码代码的时候,有时为了方便,直接把一个引用赋值给另外一个应用,例如(b=a),然后对b的属性进行修改,因为a,b所指向的地址...2.集合拷贝 因为BeanUtils不支持拷


    问题描述:

    平时在码代码的时候,有时为了方便,直接把一个引用赋值给另外一个应用,例如(b=a),然后对b的属性进行修改,因为a,b所指向的地址相同,导致最初的实例找不到了

    解决方案:

    根据实际情况,如果原始的实例在后面还有作用,那么就不能直接传递引用,应该拷贝实例
    1.普通实体类拷贝 利用BeanUtils工具,直接拷贝属性 例如: ```java BeanUtils.copyProperties(a,b); ```

    2.集合拷贝
    因为BeanUtils不支持拷贝集合,此时可以用JSON工具,先把集合序列化成json字符串,然后再反序列化
    例如:

    List<a> bList=JSON.parseArray(JSON.toJSONString(aList),a.class)
    
    展开全文
  • 解决BeanUtils.copyProperties不能复制集合类型 1.背景: 日常项目中,后台从“数据库”中获取的数据用DTO实体类接收,后台返回给“前台”的实体类是VO。 DTO和VO的属性字段个数大致相同(一般来说VO可能比DTO多)。...

    解决BeanUtils.copyProperties不能复制集合类型

    1.背景:

    日常项目中,后台从“数据库”中获取的数据用DTO实体类接收,后台返回给“前台”的实体类是VO。 DTO和VO的属性字段个数大致相同(一般来说VO可能比DTO多)。 工作中,我们经常使用的是Spring的工具类BeanUtils.copyProperties对bean属性进行复制,BeanUtils.copyProperties只能对单个实体类进行复制,不能对封装多个实体类的list集合进行复制

    2.代码示例:

    List<DeviceHistoryVideoListDto> deviceHistoryVideoListDtos = null;
    deviceHistoryVideoListDtos = sipService.queryHistoryVideoList(oid, date, tenantId);
    // DeviceHistoryVideoListDto和DeviceHistoryVideoListVo中的属性字段一模一样
     List<DeviceHistoryVideoListVo> deviceHistoryVideoListVos = new ArrayList<>();
     // 将deviceHistoryVideoListDtos集合里面的25条数据复制到deviceHistoryVideoListVos,结果deviceHistoryVideoListVos的size = 0
     BeanUtils.copyProperties(deviceHistoryVideoListDtos, deviceHistoryVideoListVos);
    

    修改后的代码示例:

     for(DeviceHistoryVideoListDto deviceHistoryVideoListDto : deviceHistoryVideoListDtos){
           DeviceHistoryVideoListVo deviceHistoryVideoListVo = new DeviceHistoryVideoListVo();
           BeanUtils.copyProperties(deviceHistoryVideoListDto,deviceHistoryVideoListVo);
           deviceHistoryVideoListVos.add(deviceHistoryVideoListVo);
            }
    

    BeanUtils.copyProperties其他特点

    1.进行“浅复制”,“深复制”有待研究

    展开全文
  • 点击关注公众号,利用碎片时间学习工作中,经常使用Spring的工具类BeanUtils.copyProperties对bean属性进行复制,这里的复制属于浅复制。且不能复制集合和数组。本文...

    点击关注公众号,利用碎片时间学习

    工作中,经常使用Spring的工具类BeanUtils.copyProperties对bean属性进行复制,这里的复制属于浅复制。且不能复制集合和数组。

    本文会对该工具进行一些测试。文末会提出复制集合属性的解决方案。

    准备工作:准备测试需要的类

    @Data
    public class Class {
        private People[] member;
        private People teacher;
        private List<People> student;
    }
    
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class People {
        private Integer id;
        private String name;
        private Integer age;
        private Integer sex;
    }
    

    测试代码:测试BeanUtils.copyProperties是否支持复制数组和集合,还有解决方案

    public static void main(String[] args) {
     // 测试数组的复制
     People[] member = new People[3];
     member[0] = new People(1, "老师", 30, 1);
     member[1] = new People(2, "班长", 15, 1);
     member[2] = new People(3, "学生", 15, 1);
     People[] member1 = new People[]{};
     BeanUtils.copyProperties(member, member1);
     System.out.println("是否可以复制数组:" + (member1.length == 0 ? false : true));
     // 测试List的复制(Map也不能复制,测试略)
     List<People> student = new ArrayList<>();
     student.add(member[1]);
     student.add(member[2]);
     List<People> student1 = new ArrayList<>();
     BeanUtils.copyProperties(student, student1);
     System.out.println("BeanUtils.copyProperties是否可以复制List:" + (student1.isEmpty() ? false : true));
     // 通过JSON工具实现List的复制(不仅仅是List,数组和Map等也可以通过类似方法实现复制,需要有无参构造方法,否则报错)
     student1 = JSON.parseArray(JSON.toJSONString(student), People.class);
     System.out.println("通过JSON工具复制List:" + student1);
     System.out.println("通过JSON工具是否深复制:" + (student.get(0) != student1.get(0) ? true : false));
     // 测试是否深复制
     Class source = new Class();
     source.setMember(member);
     source.setTeacher(member[0]);
     source.setStudent(student);
     Class target = new Class();
     BeanUtils.copyProperties(source, target);
     System.out.println("BeanUtils.copyProperties是否深复制:" + (source.getMember() != target.getMember() ? true : false));
    }
    

    测试结果

    是否可以复制数组:false
    BeanUtils.copyProperties是否可以复制List:false
    通过JSON工具复制List:[People(id=2, name=班长, age=15, sex=1), People(id=3, name=学生, age=15, sex=1)]
    通过JSON工具是否深复制:true
    BeanUtils.copyProperties是否深复制:false
    

    针对List的复制除了通过JSON工具,最简单的就是循环复制集合属性,下面测试两种方法的效率。

    public static void main(String[] args) {
     int count = 1;
     System.out.println("测试数据长度:" + count);
     List<People> source = new LinkedList<>();
     List<People> target = new LinkedList<>();
     long start;
     
     for (int i = 0; i < count; i++) {
         source.add(new People(1, "ly", 25, 1));
     }
     
     start = System.nanoTime();
     target = JSON.parseArray(JSON.toJSONString(source), People.class);
     System.out.println("JSON:" + (System.nanoTime() - start));
     
     start = System.nanoTime();
     for (int i = 0; i < count; i++) {
         People p = new People();
         BeanUtils.copyProperties(source.get(i), p);
         target.add(p);
     }
     System.out.println("BeanUtils.copyProperties" + (System.nanoTime() - start));
    }
    

    分别测试count=1、10、100、1000、10000、100000的结果。为了防止一起执行出现影响,每次只测试一种复制方法的一种情况,共执行12次。通过对比可以知道,通过JSON复制属性快于BeanUtils,

    测试数据长度:1
    JSON:154767336
    Bean:275182853
    测试数据长度:10
    JSON:165678435
    Bean:275301421
    测试数据长度:100
    JSON:167937206
    Bean:328461161
    测试数据长度:1000
    JSON:187832969
    Bean:315815289
    测试数据长度:10000
    JSON:297461312
    Bean:362763360
    测试数据长度:100000
    JSON:562035707
    Bean:5815319343
    

    通过以下方式解决复制List、Map

    public static <T> List copyList(List<T> list) {
        if (CollectionUtils.isEmpty(list)) {
            return new ArrayList();
        }
        return JSON.parseArray(JSON.toJSONString(list), list.get(0).getClass());
    }
    
    public static Map<String, Object> copyMap(Map map) {
        return JSON.parseObject(JSON.toJSONString(map));
    }
    

    (感谢阅读,希望对你所有帮助)

    来源:blog.csdn.net/weixin_38229356/

    article/details/81396572

    推荐好文

    强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!

    分享一套基于SpringBoot和Vue的企业级中后台开源项目,代码很规范!

    能挣钱的,开源 SpringBoot 商城系统,功能超全,超漂亮

    展开全文
  • mongodb 复制集合

    2021-03-10 16:26:27
    把Company1 集合的数据完全复制到 Position db.getCollection('Company1').aggregate([{$out:'Position'} ]);
  • java集合复制的另一种方法

    千次阅读 2021-03-08 08:05:11
    的话会出现类型能干不匹配的异常 * 那么我们复制数组也可以使用ArrayList的构造函数来实现 * 当然非要使用copy方法 那么使用单行注释的内容也可 * 这个例子主要说明复制不要拘泥于copy方法 * 有时候用构造函数,有...
  • 昨天同事遇到了一个奇怪的问题,他需要将一个JavaBean拷贝一份,然后对新创建的Bean进行操作。但是他对新的Bean操作后,会影响旧...浅拷贝(浅克隆)被复制对象的所有变量值都和原来的对象的值相同,但是复制后的对象...
  • 在使用MongoDB的过程中,需要将数据库中有效的值从一个总的集合复制到一个存储有效值的集合中,那么关于这个需求,该怎么实现呢? 实现方案 示例: db.all_info.find({'notice_content':{$ne:''}}).forEach...
  • PHP: 复制集合 - Manual

    2021-03-24 13:40:13
    复制集合要链接到一个复制,需要指定复制中的一个或多个成员,并使用"replicaSet" 选项指定复制的名字。多个服务器用逗号分割。示例 #1 链接到一个复制...
  • * 深度复制List A集合得到B集合,这样在修改集合A的时候 B集合中对象不会改变 * @param src 被复制集合 * @param <T> 集合中的对象(必须继承序列化接口) * @return (复制出来的新集合,修改原集合的...
  • 深度复制集合: /** * 深度复制List * @param <T> * @param src * @return * @throws IOException * @throws ClassNotFoundException */ public static <T> List<T> ...
  • 基本上,我想将所有参数从sourcePart复制到destPart.希望持久性提供程序将在Param表/实体中自动设置正确的外键. 上面的代码显然不起作用. 有没有简便的方法,还是必须创建一个新的集合,然后添加每个Param(创建新的...
  • Java中list集合复制

    2021-06-07 06:50:29
    importorg.apache.commons.collections.CollectionUtils;importjava.util.ArrayList;importjava.util.Collections;importjava.util.List;publicclassCopyTest{publicstaticvoidmain(String[]args){L...
  • 这两个都将给出一组:shallow_copy_of_set = set(old_set)要么:shallow_copy_of_set = old_set....哪些不起作用,因为集合不能是其他集合中的元素,因为它们是不可变的,因为是可变的。但是,对于青蛙胶片来说,...
  • 之前给大家介绍了一下java Collections类操作集合排序的内容,下面要给大家介绍的就是JavaCollections类操作集合复制方面的知识,一起来了解一下吧。Collections类的copy()静态方法用于将指定集合中的所有元素复制到...
  • package com.ruoyi.common.utils.bean; import cn.hutool.core.bean.BeanUtil; ... import lombok.extern.slf4j.Slf4j; import java.util.ArrayList;... * 类描述: 对象复制 * * @ClassName POJOConverte.
  • 集合java对象

    2021-03-13 07:52:32
    文章 符文 2017-10-13 909浏览量 java中的Iterator接口 Iterator接口 Iterator接口也是Java集合框架的成员,但它与Collection系列、Map系列的集合不一样:Collection系列集合、Map系列集合主要用于盛装其他对象,而...
  • List初始化、集合复制

    千次阅读 多人点赞 2021-01-13 15:00:24
    List集合复制 User类 class User{ private String a; private String b; } 1. 通过循环遍历复制List集合 List<User> userList = new ArrayList<>(); User user0 = new User("a0", "b0"); userList...
  • Collections类java.utils.Collections是集合工具类,用来对集合进行操作。Collections类的常用方法这里介绍四个常用方法:addAll(Collection c, T ... elements)shuffle(List> list)sort(List list)sort(List ...
  • * @author mzy * */ public class Demo04 { public static void main(String[] args) { try { /** * 3)从一个map集合中拷贝到一个javabean中 * 注意: * 1)只拷贝javabean存在的哪些属性(setXXX方法) * 2)须要拷贝...
  • 最近在工作的时候,有一个小需求,需要复制List的内容,然后会改变其中的数据,但是试了几种复制的方法,都是将原有的数据和复制后的数据都改变了,都没有达到我想要的效果。其中涉及到了 “浅复制”和“深复制”的...
  • 我可以订购列表,但我想复制“原始”列表而不作任何修改,这样我就可以在原始列表上注册所有更改。排序的列表包含对象,并且其字段之一存储分类ID,并使用列表的索引值更新此ID。我尝试使用克隆方法,它使列表保持未...
  • BeanUtils.copyProperties()无法复制List集合,制作通用工具类来解决。 1. 需求分析 BeanUtils.copyProperties(source,target),用于把source实体的属性值复制给target实体(同名属性可复制) 当需要对List进行整体...
  • 原标题:魔兽世界:修改集合石插件文件 让集合石队伍直接显示成员职业我,凉酒,魔兽,帅,关注。今天在论坛学到了一个非常有用的知识,第一时间分享给大家,希望能传播给更多人。首先,我们打开集合石的时候,鼠标...
  • * * 内部实现是通过source.getComponentType() 获得源Class * * @param destination 要复制到的目标数组 * @param source 待复制的源数据数组 * @param destinationClass 要复制到的目标数组数据元素Class */ ...
  • 今天遇到一个问题:对一个集合进行深度复制最先想到的是利用集合工具类的copy()方法,但是它出现了一些问题Collections.copy使用注意事项示例代码:import java.util.ArrayList;import java.util.Arrays;import java...
  • 回答(17)2 years ago你可以这样做:db..find().forEach(function(d){ db.getSiblingDB('')[''...除此之外,您可以从一个数据库执行集合的mongodump,然后将集合mongorestore存储到另一个数据库 .2 years ago最好的方...
  • 昨天在写代码的时候第一次遇到深度拷贝的问题具体是这样 list a= new list(); a= *** list b=new list();...我通过 利用 System.Runtime.Serialization序列化与反序列化完成引用对象的复制 我们对集合的赋值进
  • ## 深复制复制的官方概念我们就不用再多说了,百度一搜一大堆。 提示:以下是本篇文章正文内容,下面案例可供参考 一、深复制和浅复制的简单理解 打个比方,就好像你有一辆车,你朋友借你的车开,当他开到半路...
  • 如果为注释掉的写法的话运行结果为目标数组元素:[{"sec2":"des2","sec1":"sec1"},{"sec4":"sec4","sec3":"sec3"}]目标数组元素:[{"sec2":"des2","sec1":"sec1"},{"sec2":"des2","sec4":"sec4","sec3":"sec3"}]目标...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 435,543
精华内容 174,217
关键字:

复制集合