一、方法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. NVME CLI 命令使用

    1.下载地址https://github.com/linux-nvme/nvme-cli2.安装unzip nvme-cli-master.zipcd nvme-cli-master.zipmake ...

  2. 多线程系列(三) -synchronized 关键字使用详解

    一.简介 在之前的线程系列文章中,我们介绍了线程创建的几种方式以及常用的方法介绍. 今天我们接着聊聊多线程线程安全的问题,以及解决办法. 实际上,在多线程环境中,难免会出现多个线程对一个对象的实例变量 ...

  3. Swoole从入门到入土(18)——WebSocket服务器[心跳ping]

    由于 WebSocket 是长连接,如果一定时间内没有通讯,连接可能会断开.这时候需要心跳机制,WebSocket 协议包含了 Ping 和 Pong 两个帧,可以定时发送 Ping 帧来保持长连接. ...

  4. 苹果AppleMacOs最新Sonoma系统本地训练和推理GPT-SoVITS模型实践

    GPT-SoVITS是少有的可以在MacOs系统下训练和推理的TTS项目,虽然在效率上没有办法和N卡设备相提并论,但终归是开发者在MacOs系统构建基于M系列芯片AI生态的第一步. 环境搭建 首先要确 ...

  5. win32 - 匿名管道的使用

    目标: 创建一个父进程和子进程,在子进程的控制台窗口输入数据,数据通过管道发送给父进程,父进程的控制台窗口读取数据,最后将数据打印出来. Parent.cpp //CMD.exe #include & ...

  6. 迁移mm_wiki数据实践记录

    写在前面 虽然我的随笔大部分都是记录在静态博客站点和博客园平台的,但是有一些临时的想法还是使用了wiki来记录. 经过多次试用和对比之后,最终选择了mm-wiki来作为自托管的wiki系统. mm-w ...

  7. Docker进阶之02-Swarm集群入门实践

    Docker集群概述 Docker集群有2种方案: 1.在Docker Engine 1.12之前的集群模式被称为经典集群,这是通过API代理系统实现的集群,目前已经不再维护. 2.自Docker E ...

  8. Flask学习(三)

    数据库操作 数据库驱动(drivers)模块:pymysql.MySQLDB ORM ORM 全拼Object-Relation Mapping,中文意为 对象-关系映射.主要实现模型对象到关系数据库 ...

  9. Bind DNS Server的基础配置

    1.访问https://192.168.3.254:10000 由于SSL证书是不安全的,我用的Firefox浏览器会阻止打开网页: 看到上述界面,先选择"高级", 然后再选择&q ...

  10. 【Azure API 管理】Azure API Management在设置 Policy时,如何对URL进行解码呢? 使用 HttpUtility.UrlDecode 出错

    问题描述 Azure API Management在设置 Policy时,如何对URL进行解码呢? 使用 HttpUtility.UrlDecode 出错,是否有其他可以对URL解码的方法呢? 使用H ...