一、方法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");
四、再启动程序,不报错啦!
标签:map,HashMap,Collection,add,values,视图,集合 From: https://www.cnblogs.com/Galaxy1/p/17835756.html