java map 中computeIfAbsent用法

//实现目标 选择课程:张三选择语文,李四选择数学,王五选择英语,小明选择物理,小红选择语文,小花选择英语,
//将各个科目对应的人员列出来  语文:张三、小红 数学:李四 英语:王五、小花 物理:小明
List<Map<String,Object>> mapList = new ArrayList<>();//此过程可以从数据库查询
        Map<String,Object> map = new HashMap<>();
        map.put("name","张三");
        map.put("subject","语文");
        mapList.add(map);
        Map<String,Object> mapOne = new HashMap<>();
        mapOne.put("name","李四");
        mapOne.put("subject","数学");
        mapList.add(mapOne);
        Map<String,Object> mapTwo = new HashMap<>();
        mapTwo.put("name","王五");
        mapTwo.put("subject","英语");
        mapList.add(mapTwo);
        Map<String,Object> mapThree = new HashMap<>();
        mapThree.put("name","小明");
        mapThree.put("subject","物理");
        mapList.add(mapThree);
        Map<String,Object> mapFour = new HashMap<>();
        mapFour.put("name","小红");
        mapFour.put("subject","语文");
        mapList.add(mapFour);
        Map<String,Object> mapFive = new HashMap<>();
        mapFive.put("name","小花");
        mapFive.put("subject","英语");
        mapList.add(mapFive);
        System.out.println("mapList-----"+mapList);
        //将数据取出来,存放到Map
        Map<String,List<String>> listMap = new HashMap<>();
        for (int i = 0 ; i<mapList.size();i++){
            listMap.computeIfAbsent((String) mapList.get(i).get("subject"),k ->new ArrayList<>())
                    .add((String)mapList.get(i).get("name"));
        }

        //存放处理后的数据
        Map<String,Object> objectMap = new HashMap<>();
        //循环获取map中的key和value
        Set<Map.Entry<String,List<String>>> entrySet = listMap.entrySet();
        for (Map.Entry<String,List<String>> entry : entrySet){
            String key = entry.getKey();
            List<String> stringList = entry.getValue();
            objectMap.put(key, StringUtils.join(stringList,"、"));
        }
        System.out.println("objectMap-----"+objectMap);

输出结果

加入mapList集合的数据

mapList-----[

{subject=语文, name=张三},

{subject=数学, name=李四},

{subject=英语, name=王五},

{subject=物理, name=小明},

{subject=语文, name=小红},

{subject=英语, name=小花}

]

得到最终的结果
objectMap-----{

物理=小明,

数学=李四,

语文=张三、小红,

英语=王五、小花

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值