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-----{

物理=小明,

数学=李四,

语文=张三、小红,

英语=王五、小花

}

Java 的 `Map` 接口中的 `computeIfAbsent` 方法在 Java 8 中被引入,用于计算指定键的映射值(如果该键还没有映射到某个值),并将其插入到映射中。这一方法可以简化代码,避免显式地检查映射是否已经包含了给定的键,尤其适用于处理需要初始化集合类型值的映射场景 [^2]。 该方法的签名为 `V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)`,其中 `K` 是映射的键的类型,`V` 是映射的值的类型,`key` 是要检查其是否存在于映射中的键,`mappingFunction` 是一个函数,若键不存在,则会调用此函数来计算其值,该函数接受键作为输入,并返回新计算的值 [^2]。 其工作原理是先检查映射中是否已经存在给定的键。若映射中已经存在该键,`computeIfAbsent` 方法不会做任何操作,并返回该键当前映射的值;若映射中不存在该键,`computeIfAbsent` 会调用提供的 `mappingFunction` 函数,使用给定的键作为输入来计算值,然后将新计算的值与键关联,并插入到映射中,最后返回新计算的值 [^2]。 以下是一个简单的代码示例: ```java import java.util.HashMap; import java.util.Map; public class ComputeIfAbsentExample { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); // 键 "apple" 已存在,返回已有值 Integer value1 = map.computeIfAbsent("apple", k -> k.length()); System.out.println("Value for 'apple': " + value1); // 键 "banana" 不存在,计算并插入新值 Integer value2 = map.computeIfAbsent("banana", k -> k.length()); System.out.println("Value for 'banana': " + value2); System.out.println("Map after computeIfAbsent: " + map); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值