通过流处理和 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属性的值都发生了改变。