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属性的值都发生了改变。

相关推荐
云霄IT11 分钟前
安卓开发之java转dex再转smali
android·java·python
果汁华12 分钟前
Typer:基于类型提示的现代Python CLI框架
开发语言·网络·python
用户66885998476623 分钟前
BCrypt密码加密
java
赵药师24 分钟前
多进程-生产者消费者C++实现
java·开发语言·jvm
Flittly31 分钟前
【SpringAIAlibaba新手村系列】(16)调用百度 MCP 服务
java·笔记·spring·ai·springboot
雾岛听蓝32 分钟前
Linux线程基础
linux·开发语言·经验分享
zhangzeyuaaa37 分钟前
Python 异常机制深度剖析
开发语言·python
whitelbwwww38 分钟前
C++基础--类型、函数、作用域、指针、引用、文件
开发语言·c++
byzh_rc43 分钟前
[AI编程从入门到入土] 配置文件
java·数据库·ai编程
leaves falling1 小时前
C/C++ const:修饰变量和指针的区别(和引用底层关系)
c语言·开发语言·c++