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");
四、再启动程序,不报错啦!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了