Java通过流处理和 Collectors.toMap 得到的Map是浅拷贝

通过流处理和 Collectors.toMap 得到的Map是浅拷贝
实验
java 复制代码
public void testCategoryMapper(){
//       List<CourseCategoryTreeDto> courseCategoryTreeDtos = courseCategoryService.queryTreeNodes("1");
//        log.info(courseCategoryTreeDtos.toString());
       QueryCourseParamDto queryCourseParamDto1 = new QueryCourseParamDto();
       queryCourseParamDto1.setCourseName("1");
       queryCourseParamDto1.setAuditStatus("1");
       queryCourseParamDto1.setPublishStatus("1");

       QueryCourseParamDto queryCourseParamDto2 = new QueryCourseParamDto();
       queryCourseParamDto2.setCourseName("2");
       queryCourseParamDto2.setAuditStatus("2");
       queryCourseParamDto2.setPublishStatus("2");

       ArrayList<QueryCourseParamDto> queryCourseParamDtos = new ArrayList<>();
       queryCourseParamDtos.add(queryCourseParamDto1);
       queryCourseParamDtos.add(queryCourseParamDto2);


       Map<String, QueryCourseParamDto> map = queryCourseParamDtos.stream().collect(Collectors.toMap(QueryCourseParamDto::getCourseName, e -> e));

       map.get("1").setPublishStatus("xxx");

       queryCourseParamDtos.stream().forEach(e -> {
           System.out.println(e);
       });
   }

其实从图中就可以看出Map中第一个元素的地址和原列表中第一个元素的地址是相同的,所以做的是浅拷贝。

执行完操作之后,列表中元素的publicStatus属性和Map中元素的publicStatus属性的值都发生了改变。

相关推荐
神の愛1 分钟前
java日志功能
java·开发语言·前端
Reuuse1 分钟前
基于 C++ 的网页五子棋对战项目实战
开发语言·c++
不会写DN4 分钟前
如何设计应用层 ACK 来补充 TCP 的不足?
开发语言·网络·数据库·网络协议·tcp/ip·golang
xyq20248 分钟前
PHP MySQL 简介
开发语言
我能坚持多久9 分钟前
利用Date类的实现对知识巩固与自省
开发语言·c++
却话巴山夜雨时i10 分钟前
互联网大厂Java面试:从Spring到微服务的全栈挑战
java·spring boot·redis·微服务·面试·kafka·技术栈
ch.ju15 分钟前
Java程序设计(第3版)第二章——java的数据类型:字符 char
java
尘世壹俗人15 分钟前
idea提交git版本由于中文文件名卡死不动
java·git·intellij-idea
Rabitebla17 分钟前
C++ 入门基础:从 C 到 C++ 的第一步
c语言·开发语言·c++
西魏陶渊明19 分钟前
解决异步挑战:Reactor Context 实现响应式上下文传递
开发语言·python