使用java的Stream流进行Collectors.groupingBy分组后生成Map,对Map进行删除原集合是否会发生改变

在Java中,当我们使用Collectors.groupingBy方法对集合进行分组操作时,生成的新映射(Map)是基于原始集合(allItems)的数据结构和内容创建的。这意味着,如果你更改了新的映射allItemMap中的值(例如,修改了List的内容),这不会直接影响到原始集合allItems

但是,如果FinFreightItemR对象本身是可变对象,并且你在映射中的列表中直接修改了这些对象的属性,那么虽然allItems集合本身没有变化(集合内的引用没有改变),但通过这个引用指向的对象内容已经被修改,所以看起来就像是原始集合也发生了变化。

总的来说,对于原始集合allItems,其元素的引用不会因为映射allItemMap的更改而改变,但如果修改了这些引用所指向的对象内容,则会看到原始集合中相应对象内容的变化。

还有·就是在这个Java 8的流式处理操作中,.collect(Collectors.groupingBy(User::getProfitmonth))会创建一个新的Map实例collectMap,该映射基于原始集合userList中的元素进行分组。虽然新的映射中的列表(List)包含的是引用到原始userList中User对象的地址,但映射本身以及在映射内部创建的新列表结构都是独立于原userList的新对象。

所以:

  1. collectMap这个新映射是分配在不同的内存地址上的。
  2. 映射中的每个键值对(Key-Value)所对应的List<User>是新的列表实例,它们包含了指向userList中原有User对象的引用。
  3. 如果你修改了collectMap中的User对象属性,由于引用共享,这些更改也会反映在原始userList中对应的User对象上。
  4. 但是,如果你添加或删除collectMap中的元素,这不会影响到原始userList的大小和内容。
    以下是一段实例代码:
 List<User> userList=new ArrayList<>();User user=new User();user.setName("wxl");user.setAmount(new BigDecimal("28000"));user.setProfitmonth("2024-04");user.setUploadFileName("12-1 HAI SU 7.pdf");User user1=new User();user1.setName("wxl");user1.setAmount(new BigDecimal("28000"));user1.setProfitmonth("2024-05");user1.setUploadFileName("12-1 HAI SU 7.pdf");User user2=new User();user2.setName("wxl");user2.setAmount(new BigDecimal("32000"));user2.setProfitmonth("2024-06");user2.setUploadFileName("12-1 HAI SU 7.pdf");userList.add(user);userList.add(user1);userList.add(user2);System.out.println(userList);Map<String, List<User>> collectMap = userList.stream().collect(Collectors.groupingBy(User::getProfitmonth));System.out.println(collectMap);List<User> list = collectMap.get("2024-06");list.get(0).setUploadFileName("su7.pdf");collectMap.remove("2024-04");System.out.println(collectMap);System.out.println(userList);

我们可以看到运行结果是:
在这里插入图片描述
可以看到在Map中删除数据之后,原List集合中的数据是没有变删除的;但是如果对元素进行修改的话,那原来的List集合元素值也会变。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/721558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发中的一些重要概念

目录 应用&#xff08;Application&#xff09;/ 系统&#xff08;System&#xff09; 模块&#xff08;Module&#xff09;/ 组件&#xff08;Component&#xff09; 分布式&#xff08;Distributed&#xff09; 集群&#xff08;Cluster&#xff09; 主&#xff08;Maste…

leetcode热题HOT 238. 除自身以外数组的乘积

一、问题描述&#xff1a; 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#x…

web游戏-飞机大战

H5小游戏源码、JS开发网页小游戏开源源码大合集。无需运行环境,解压后浏览器直接打开。有需要的,私信本人,发演示地址,可以后再订阅,发源码,含60+小游戏源码。如五子棋、象棋、植物大战僵尸、开心消消乐、扑鱼达人、飞机大战等等 <!DOCTYPE html> <html lang=&q…

Golang简介与基本语法介绍

Go语言&#xff08;通常称为Golang&#xff09;是由Google开发的一种静态强类型、编译型、并发性强的编程语言。Go语言的设计初衷是为了提高大型软件系统的开发效率&#xff0c;并解决其他编程语言在处理多核处理器、网络系统和大型代码库时遇到的一些问题。 一、Go语言的特点…

防止 服务器 被爆破 登录的 方法

防止 服务器 被爆破 登录的 方法 Centos8防止云服务器被爆破登录的应对办法 https://blog.csdn.net/qq_64573330/article/details/126948166

【牛客】SQL136 每类试卷得分前3名-窗口函数

描述 现有试卷信息表examination_info&#xff08;exam_id试卷ID, tag试卷类别, difficulty试卷难度, duration考试时长, release_time发布时间&#xff09;&#xff1a; idexam_idtagdifficultydurationrelease_time19001SQLhard602021-09-01 06:00:0029002SQLhard602021-09…

请解释Netty中的Pipeline和ChannelHandler,以及它们是如何工作的?如何在Netty中实现消息的编解码?有哪些常用的编解码器?

请解释Netty中的Pipeline和ChannelHandler&#xff0c;以及它们是如何工作的&#xff1f; 在Netty中&#xff0c;Pipeline和ChannelHandler是两个核心概念&#xff0c;它们共同协作来处理网络事件和数据流。 Pipeline&#xff08;管道&#xff09; Pipeline可以看作是一个处理…

ardupilot 及PX4姿态误差计算算法对比分析

目录 文章目录 目录摘要1.APM姿态误差计算算法2.PX4姿态误差计算算法3.结论摘要 本节主要记录ardupilot 及PX4姿态误差计算算法差异对比过程,欢迎批评指正。 备注: 1.创作不易,有问题急时反馈 2.需要理解四元物理含义、叉乘及点乘含义、方向余弦矩阵含义、四元数乘法物理含…

sklearn函数:train_test_split(分割训练集和测试集)

函数的功能是分割训练集和测试集 函数中参数的用法&#xff1a; 1. test_size&#xff1a;float or int, defaultNone 测试集的大小&#xff0c;如果是小数的话&#xff0c;值在&#xff08;0,1&#xff09;之间&#xff0c;表示测试集所占有的比例&#xff1b; 如果是整数…

java字符流

1、FileWriter写数据 public static void main(String[] args) throws IOException {FileWriter fw new FileWriter("os\\a.txt");fw.write("大得");//数组写法char[] chs {a, b, c, d, e};fw.write(chs);fw.close();}2、FileReader 读数据 public stati…

2024年2核4G服务器优惠价格,选阿里云还是腾讯云?

2核4G云服务器选阿里云还是腾讯云&#xff1f;2核4G服务器多少钱一年&#xff1f;1个月费用价格&#xff1f;腾讯云轻量2核4G5M带宽服务器165元一年、252元15个月、三年756元&#xff0c;阿里云2核4G4M带宽轻量服务器165元12个月、ECS云服务器2核4G配置30元3个月、2核4G5M带宽1…

MySQL 多表查询 连接查询 自连接

介绍 自连接查询&#xff0c;可以是内连接查询&#xff0c;也可以是外连接查询&#xff0c;一句话自己连接自己&#xff0c;一个表当作两个表进行连接。 语法 SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件两个表A说明是同一张表&#xff0c;但是别名不同 案例…

文献速递:深度学习疾病预后--使用深度学习对数字病理图像进行胃癌的准确诊断和预后预测:一项回顾性多中心研究

Title 题目 Accurate diagnosis and prognosis prediction of gastric cancer using deep learning on digital pathological images: A retrospective multicentre study 使用深度学习对数字病理图像进行胃癌的准确诊断和预后预测&#xff1a;一项回顾性多中心研究 01 文献…

OpenMMlab AI实战营第四期培训

OpenMMlab AI实战营第四期培训 OpenMMlab实战营第四次课2023.2.6学习参考一、什么是目标检测1.目标检测下游视觉任务2.图像分类 v.s. 目标检测 二、目标检测实现1.滑窗 Sliding Window2.滑窗的效率问题3.改进思路&#xff08;1&#xff09;消除滑窗中的重复计算&#xff08;2&a…

x6.js 流程图绘制笔记,常用函数

官方参考网站如下&#xff1a;https://antv-x6.gitee.io/zh/docs/tutorial/about 安装x6 输入以下命令 npm install antv/x6 --save 引用插件代码如下&#xff1a; import { Graph } from antv/x6; 创建绘制区域 this.guiX6 new Graph({container: document.querySelect…

【MGR】MySQL Group Replication 背景

目录 17.1 Group Replication Background 17.1.1 Replication Technologies 17.1.1.1 Primary-Secondary Replication 17.1.1.2 Group Replication 17.1.2 Group Replication Use Cases 17.1.2.1 Examples of Use Case Scenarios 17.1.3 Group Replication Details 17.1…

EdgeX Foundry 安全模式安装部署

文章目录 一、安装准备1.官方文档2. 克隆服务器3.安装 Docker4.安装 docker-compose 二、安装部署1.docker-comepse2.启动 EdgeX Foundry3.访问 UI3.1. consul3.2. EdgeX Console EdgeX Foundry # EdgeX Foundryhttps://iothub.org.cn/docs/edgex/ https://iothub.org.cn/docs…

Java IO流详解(史上最全18个案例代码)

每文一句 每想拥抱你一次&#xff0c;天空飘落一片雪&#xff0c;至此雪花拥抱撒哈拉&#xff01; —荷西 一、IO流开篇 1. 概念&#xff1a; IO&#xff08;Input/Output&#xff09;流是Java中用于处理输入和输出数据的机制。它允许程序与外部设备&#xff08;如文件、网络…

基于springboot的新闻稿件管理系统论文

新闻稿件管理系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了新闻稿件管理系统的开发全过程。通过分析新闻稿件管理系统管理的不足&#xff0c;创建了一个计算机管理新闻稿件管理系统的方案。文章介绍了新…

适用于ZigBee应用的JN5168/001K、JN5188HN、JN5188THN/001Z、JN5189THN超低功耗射频微控制器MCU

一、JN5168/001K 适用于ZigBee应用的超低功耗、高性能无线微控制器 JN5168是超低功耗、高性能无线微控制器&#xff0c;适用于ZigBee应用&#xff0c;它具有256kB嵌入式闪存、32 kB RAM&#xff0c;无需外部存储器即可进行OTA升级。32位RISC处理器可通过不同宽度指令、多级指令…