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 小时前
Oracle 关闭 impdp任务
java
编程爱好者熊浪2 小时前
RedisBloom使用
java
苇柠2 小时前
Spring框架基础(1)
java·后端·spring
yics.2 小时前
数据结构——栈和队列
java·数据结构
架构师沉默2 小时前
我用一个 Postgres 实现一整套后端架构!
java·spring boot·程序人生·架构·tdd
xiucai_cs2 小时前
布隆过滤器原理与Spring Boot实战
java·spring boot·后端·布隆过滤器
向阳花自开2 小时前
Spring Boot 常用注解速查表
java·spring boot·后端
red润2 小时前
let obj = { foo: 1 };为什么Reflect.get(obj, ‘foo‘, { foo: 2 }); // 输出 1?
开发语言·javascript·ecmascript
froginwe113 小时前
PHP MySQL Delete 操作详解
开发语言
huan_19933 小时前
通过docker构建一个java镜像
java·docker