当前位置: 首页 > news >正文

关于Java中的List<User>如何进行深拷贝

联调中发现了一个很初级,但有容易被忽略的拷贝问题:

错误方式:List<User> us = new ArrayList<>(); // name = "张三"List<User> us1 = new ArrayList<>(us);for (User u : us) {...u.setName("douzi")
}for (User u : us1) {...
}System.out.print(us1); // 姓名修改成douzi了

此种拷贝,如果修改了集合us中的User对象,us1会跟着改变;

找了网上很多方式:

1.clone方式

us的方法里边不存在clone;

2.addAll方法

不是深度拷贝,修改了集合us中的User对象,us1会跟着改变

3.us.stream().collect(Collectors.toList())

不是深度拷贝,修改了集合us中的User对象,us1会跟着改变

4.CollectionUtil.copy(us)

不是深度拷贝,修改了集合us中的User对象,us1会跟着改变;

解决方案:

1.原生写法

List<User> us = new ArrayList<>();List<User> us1 = new ArrayList<>(us.size());
for (int i = 0; i < us.size(); i++) {User u = us.get(i);User tmp = new User();BeanUtil.copyProperties(u, tmp, false);us1.add(tmp);
}

2.hutool工具

List<User> us = new ArrayList<>();List<User> us1 = CglibUtil.copyList(us, User::new);

总结

有时候老鸟也会晕呀!

http://www.lryc.cn/news/449021.html

相关文章:

  • 2025 年 IT 前景:机遇与挑战并存,人工智能和云计算成重点
  • Cortex-A7和Cortex-M7架构处理器取中断向量全流程分析
  • MODELS 2024震撼续章:科技与可持续性的未来交响曲
  • CICD 持续集成与持续交付
  • “数据面”(Data Plane)是指负责实际数据处理和转发的部分
  • 面试题:MySQL你用过WITH吗?领免费激活码
  • consul 介绍与使用,以及spring boot 项目的集成
  • Linux常用命令shell常用知识 。。。。面试被虐之后,吐血整理。。。。
  • 压力测试指南-压力测试基础入门
  • Linux:LCD驱动开发
  • QT:常用类与组件
  • 企业内训|提示词工程师高阶技术内训-某运营商研发团队
  • K8S真正删除pod
  • 数据结构:队列及其应用
  • 26个用好AI大模型的提示词技巧
  • 线性表二——栈stack
  • 浏览器发送请求后关闭,服务器的处理过程
  • tee命令:轻松同步输出到屏幕与文件
  • 【经验技巧】如何做好S参数的仿测一致性
  • js逆向——webpack实战案例(一)
  • Spring Boot 进阶-Spring Boot的全局异常处理机制详解
  • 滚雪球学MySQL[7.1讲]:安全管理
  • 反射及其应用---->2
  • [Python学习日记-32] Python 中的函数的返回值与作用域
  • 儿童发光耳勺值得买吗?儿童发光耳勺最建议买的五个牌子!
  • TIPS 二进制程序暴露符号给动态链接库使用
  • 【分布式微服务云原生】8分钟掌握微服务通信的艺术:Dubbo与OpenFeign全面解析
  • sicp每日一题[2.33]
  • 【Mybatis】常见面试题汇总 共56题
  • 每天一道面试题(17):服务网格学习笔记