HashMap集合的map.values()返回的Collection集合执行add方法报空指针问题
一、方法1、
private Collection<String> setPermissionTenant(List<SysPermission> ls, int tenantId) {
// 循环两次 第一次设置ID和tenantId 第二次设置pid
Map<String, String> map = new HashMap<>();
for (SysPermission p : ls) {
String oldId = p.getId();
String newId = randomId();
map.put(oldId, newId);
p.setId(newId);
p.setTenantId(tenantId);
p.setCreateBy(null);
p.setCreateTime(null);
p.setUpdateBy(null);
p.setUpdateTime(null);
}
for (SysPermission p : ls) {
String oldPid = p.getParentId();
if (oConvertUtils.isNotEmpty(oldPid)) {
String newPid = map.get(oldPid);
if (oConvertUtils.isNotEmpty(newPid)) {
p.setParentId(newPid);
}
}
}
return map.values();
}
方法2调用方法1
private void test () {
Collection<String> menuIds = setPermissionTenant(ls,Integer.parseInt(tenantId));
menuIds.add("123456")
}
//向 Collection<String> 类型的集合中添加数据的方式取决于具体的集合实现。在 Java 中,常见的 Collection 接口的实现包括 ArrayList、LinkedList、HashSet 等
//所以这里add这样写没问题.
二、运行程序,抛出NULL空指针,排查原因得到:
在 Java 中,Map.values() 返回的是一个 Collection 视图,但是这个视图是不支持直接添加元素的。这是因为 values() 返回的是对原始映射值的视图,对视图的修改会反映在原映射中,但是不能直接添加新元素。如果尝试使用 add 方法,可能会得到 UnsupportedOperationException 异常。
三、解决办法,把他转化成可操作的集合
// 转换map.values()为ArrayList
List<String> valuesList = new ArrayList<>(map.values()); // 向ArrayList中添加新元素
valuesList.add("123");
四、再启动程序,不报错啦!
HashMap集合的map.values()返回的Collection集合执行add方法报空指针问题的更多相关文章
- java:容器/集合(Map(HashMap,TreeMap)Collection和Collections,(Collection-value();)
*Map接口:采用是键值对的方式存放数据.无序 HashMap: *常见的实现类: *--HashMap:基于哈希表的 Map 接口的实现. *常用的构造方法: * HashMap()构造一个具有默认 ...
- DWR3.0 dwr 返回值(数组,集合,Map)
首先导入项目所需要的包,如下:dwr.jar,commons-logging-1.0.4.jar,版本可以调整 1.web.xml<?xml version="1.0" en ...
- java集合框架map
Map<K,V> K key V value Map集合:该集合存储键值对.一对一对往里存,而且要保证键的唯一性. 1,添加. 2,删除. 3,判断. 4,获取. Map |--Hasht ...
- 集合框架-Map集合
* Map集合和Collection集合的区别? * Map集合存储元素是成对出现的,Map集合的键是唯一的,值是可重复的.可以把这个理解为:夫妻对 * Collection集合存储元素是单独出现的, ...
- 集合之map详解(遍历)
13.简单介绍Map 12.Map排序(TreeMap的key排序,TreeMap的value排序:HashMap的value排序:) 11.map集合的6种遍历方式 ============= 2 ...
- [集合]Collection集合框架源码分析
Collection接口 在java的集合类库中,基本接口是Collection,该接口的在集合中的源码定义如下(将源码中的注释删掉了): public interface Collection< ...
- Java基础Collection集合
1.Collection是所有集合的父类,在JDK1.5之后又加入了Iterable超级类(可以不用了解) 2.学习集合从Collection开始,所有集合都继承了他的方法 集合结构如图:
- 浅谈Collection集合
俗话说:一个东西,一件事都离不开三句话:"是什么,为什么,怎么办" 集合是什么: 集合简单的说一个数组集合的高级体现,用来存储数据或对象的容器: 集合为什么存在: 集合只是体现了对 ...
- Java的Collection集合的常用方法
boolean add(E e) 添加元素到Collection集合中. boolean addAll(Collection<? extends E> c) 将指定c中的所有元素都添加到此 ...
- Collection集合汇总
Collectioin(java) Collection简介 打开帮助文档 java.utill //使用时需要导包 Interface Collection 集合层次结构中的根界面 . 集合表示一组 ...
随机推荐
- python各版本新特性
# py3.7 https://docs.python.org/zh-cn/3/whatsnew/3.7.html # py3.8 https://docs.python.org/zh-cn/3/wh ...
- FROM_UNIXTIME函数格式化时间戳日期类型
select FROM_UNIXTIME(bce.daysec_time/1000,'%Y-%m-%d %h:%i:%s') ,bce.* from biz_cvent bce where bce.d ...
- chatGPT初体验
chatGPT NLP技术,通过统计的手段模拟出更正确的答案. 他与以前的NLP不一样,他有上下文语义,他能够模拟场景,能够总结很多文章信息. 因此对于谷歌等搜索引擎就很有攻击性了,因为chatGPT ...
- 照片也能说话了?嘴型表情全同步,AI数字人时代要来了
SadTalker是一款先进的人工智能模型,它通过从音频中学习生成3D运动系数,并使用全新的三维面部渲染器来生成头部运动,只需传入一张照片和一段音频,就能生成高质量的AI数字人视频 工作原理 1.显式 ...
- 使用 Abp.Zero 搭建第三方登录模块(二):服务端开发
微信SDK库的集成 微信SDK库是针对微信相关 API 进行封装的模块 ,目前开源社区中微信SDK库数量真是太多了,我选了一个比较好用的EasyAbp WeChat库. EasyAbp/Abp.W ...
- vscode 花括号 突出连接线 bracket 两个设置点 (括号标识符)
vscode 花括号 突出连接线 bracket 两个设置点 外观 设置 设置里面搜索 bracket Editor - Guides: Highlight Active Bracket Pair E ...
- centos 定时任务
想法 看见一个别的项目,每天扒bing的背景,然后 生成个列表,然后数据就一天天的增加,创意非常好 有时间研究下 关键字 centos 定时任务 基于centos7系统定时任务创建 https://b ...
- input textarea 禁止输入 非数字,特别是中文字符,光标位置保持不变 - vue2
input textarea 禁止输入 非数字,特别是中文字符,光标位置保持不变 思路:禁止输入 主要是用 keydown事件限制 不让输入即可,主要是输入中文的时候,之前没弄过. 禁止中文输入思路 ...
- opus编解码的特色和优点
概念原理 Opus是一个有损音频压缩的数字音频编码格式,由Xiph.Org基金会开发,之后由互联网工程任务组(IETF)进行标准化,目标是希望用单一格式包含声音和语音,取代Speex和Vorbis ...
- 麦克风阵列技术-beaforming开源算法源码分析
概述 在音频前端处理算法中,beamforming算法是一个无法绕过的存在,随着AI技术的广泛发展,前端语音技术的需求也在呈现个性化的动态范围.作为一个深耕音频算法多年的老兵,发现站在巨人的肩膀上 ...