首页 > 其他分享 >HashMap集合的map.values()返回的Collection集合执行add方法报空指针问题

HashMap集合的map.values()返回的Collection集合执行add方法报空指针问题

时间:2023-11-16 11:14:07浏览次数:38  
标签:map HashMap Collection add values 视图 集合

一、方法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");

四、再启动程序,不报错啦!

标签:map,HashMap,Collection,add,values,视图,集合
From: https://www.cnblogs.com/Galaxy1/p/17835756.html

相关文章

  • 记hashmap
    hashmap是map接口的一个实现类,在同步的情况下hashmap的性能是比较好的 hashmap就是一个kv键值对的集合,将数值散列均匀的存储在哈希表中。插入方法为map.put(k,v),读取方法为map.get(k,v)允许使用null键和null值,会被默认为0hashmap采用的是数组+链表的存储方式,当链表长度>8时会......
  • React.Children.map的用法
    React.Children用很多用法,如下图,经常会用到的是toArray(),具体用法可以自行了解,这里记录下map()的用法和使用到的场景。1.用法:React.Children.map接收2个参数,第一个是所有子元素,第二个是个回调,可以对每个子元素进行处理,然后返回处理后的子元素。2.使用场景:子元素(也可理解为......
  • Collections工具类、(Arrasy.asList(xxx)的结果List是一个受限集合,不能添加和删除元素
     Arrasy.asList(arr)的结果List是一个受限集合,不能添加和删除元素  ......
  • Map---IdentityHashMap
    概述Thisclassimplementsthe<tt>Map</tt>interfacewithahashtable,usingreference-equalityinplaceofobject-equalitywhencomparingkeys(andvalues).Inotherwords,inan<tt>IdentityHashMap</tt>,twokeys<tt>k1<......
  • 如何在mapbox中将标注添加到面
    consttestGeoJOSN=()=>{//加载GeoJSON数据map.addSource("geojson",{type:"geojson",data:china,generateId:true,});map.addLayer({id:"china",type:"fill",......
  • HashMap
     ......
  • Map集合
        ......
  • 【随手记】mybatis动态sql foreach遍历List<Map>问题
    使用mybatis时经常需要在xml里写动态sql,发现foreach标签使用的问题foreach标签使用当Mapper传参是List<Map<String,Object>集合的形式时,不能直接使用参数名,会找不到对应的参数。list类型的参数会特殊处理封装在map中,map的key就叫list所以collection属性值只能是"list"//m......
  • DevExpress WinForms HeatMap组件,一个高度可自定义热图控件!
    通过DevExpressWinForms可以为WindowsForms桌面平台提供的高度可定制的热图UI组件,体验DevExpress的不同之处。DevExpressWinForms有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。同时能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还......
  • Map遍历删除元素的几种方法
    2哥 :3妹,今天是周末,又不用上班,干嘛看着不开心的样子啊?3妹:你没有看昨天的新闻吗,昨天国家痛失了两位重要人物。2哥:哎,看到了,生老病死,也是没有办法。唯愿逝者安息,生者坚强!我们能做的,就是更加坚强,好好学习,建设祖国!3妹:好吧。2哥:还记得我们之前学习的:list遍历时删除元素的方法 吗,那如......