一、方法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 接口的实现包括 ArrayListLinkedListHashSet
//所以这里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方法报空指针问题的更多相关文章

  1. java:容器/集合(Map(HashMap,TreeMap)Collection和Collections,(Collection-value();)

    *Map接口:采用是键值对的方式存放数据.无序 HashMap: *常见的实现类: *--HashMap:基于哈希表的 Map 接口的实现. *常用的构造方法: * HashMap()构造一个具有默认 ...

  2. DWR3.0 dwr 返回值(数组,集合,Map)

    首先导入项目所需要的包,如下:dwr.jar,commons-logging-1.0.4.jar,版本可以调整 1.web.xml<?xml version="1.0" en ...

  3. java集合框架map

    Map<K,V> K key V value Map集合:该集合存储键值对.一对一对往里存,而且要保证键的唯一性. 1,添加. 2,删除. 3,判断. 4,获取. Map |--Hasht ...

  4. 集合框架-Map集合

    * Map集合和Collection集合的区别? * Map集合存储元素是成对出现的,Map集合的键是唯一的,值是可重复的.可以把这个理解为:夫妻对 * Collection集合存储元素是单独出现的, ...

  5. 集合之map详解(遍历)

    13.简单介绍Map 12.Map排序(TreeMap的key排序,TreeMap的value排序:HashMap的value排序:) 11.map集合的6种遍历方式  ============= 2 ...

  6. [集合]Collection集合框架源码分析

    Collection接口 在java的集合类库中,基本接口是Collection,该接口的在集合中的源码定义如下(将源码中的注释删掉了): public interface Collection< ...

  7. Java基础Collection集合

    1.Collection是所有集合的父类,在JDK1.5之后又加入了Iterable超级类(可以不用了解) 2.学习集合从Collection开始,所有集合都继承了他的方法 集合结构如图:

  8. 浅谈Collection集合

    俗话说:一个东西,一件事都离不开三句话:"是什么,为什么,怎么办" 集合是什么: 集合简单的说一个数组集合的高级体现,用来存储数据或对象的容器: 集合为什么存在: 集合只是体现了对 ...

  9. Java的Collection集合的常用方法

    boolean add(E e) 添加元素到Collection集合中. boolean addAll(Collection<? extends E> c) 将指定c中的所有元素都添加到此 ...

  10. Collection集合汇总

    Collectioin(java) Collection简介 打开帮助文档 java.utill //使用时需要导包 Interface Collection 集合层次结构中的根界面 . 集合表示一组 ...

随机推荐

  1. python各版本新特性

    # py3.7 https://docs.python.org/zh-cn/3/whatsnew/3.7.html # py3.8 https://docs.python.org/zh-cn/3/wh ...

  2. FROM_UNIXTIME函数格式化时间戳日期类型

    select FROM_UNIXTIME(bce.daysec_time/1000,'%Y-%m-%d %h:%i:%s') ,bce.* from biz_cvent bce where bce.d ...

  3. chatGPT初体验

    chatGPT NLP技术,通过统计的手段模拟出更正确的答案. 他与以前的NLP不一样,他有上下文语义,他能够模拟场景,能够总结很多文章信息. 因此对于谷歌等搜索引擎就很有攻击性了,因为chatGPT ...

  4. 照片也能说话了?嘴型表情全同步,AI数字人时代要来了

    SadTalker是一款先进的人工智能模型,它通过从音频中学习生成3D运动系数,并使用全新的三维面部渲染器来生成头部运动,只需传入一张照片和一段音频,就能生成高质量的AI数字人视频 工作原理 1.显式 ...

  5. 使用 Abp.Zero 搭建第三方登录模块(二):服务端开发

    ​ 微信SDK库的集成 微信SDK库是针对微信相关 API 进行封装的模块 ,目前开源社区中微信SDK库数量真是太多了,我选了一个比较好用的EasyAbp WeChat库. EasyAbp/Abp.W ...

  6. vscode 花括号 突出连接线 bracket 两个设置点 (括号标识符)

    vscode 花括号 突出连接线 bracket 两个设置点 外观 设置 设置里面搜索 bracket Editor - Guides: Highlight Active Bracket Pair E ...

  7. centos 定时任务

    想法 看见一个别的项目,每天扒bing的背景,然后 生成个列表,然后数据就一天天的增加,创意非常好 有时间研究下 关键字 centos 定时任务 基于centos7系统定时任务创建 https://b ...

  8. input textarea 禁止输入 非数字,特别是中文字符,光标位置保持不变 - vue2

    input textarea 禁止输入 非数字,特别是中文字符,光标位置保持不变 思路:禁止输入 主要是用 keydown事件限制 不让输入即可,主要是输入中文的时候,之前没弄过. 禁止中文输入思路 ...

  9. opus编解码的特色和优点

    概念原理   Opus是一个有损音频压缩的数字音频编码格式,由Xiph.Org基金会开发,之后由互联网工程任务组(IETF)进行标准化,目标是希望用单一格式包含声音和语音,取代Speex和Vorbis ...

  10. 麦克风阵列技术-beaforming开源算法源码分析

    概述   在音频前端处理算法中,beamforming算法是一个无法绕过的存在,随着AI技术的广泛发展,前端语音技术的需求也在呈现个性化的动态范围.作为一个深耕音频算法多年的老兵,发现站在巨人的肩膀上 ...