java的map的computeIfAbsent函数使用

原始代码:

        for (DingDaykey dingDaykey : dingDaykeys) {
            String postId = dingDaykey.getPostId();
            LinkedList<DingDaykey> dingDaykeys1 = postIdMap.get(postId);
            if (dingDaykeys1==null){
                dingDaykeys1=new LinkedList<>();
            }
            dingDaykeys1.add(dingDaykey);
            postIdMap.put(postId,dingDaykeys1);
        }

这段代码的目的是将DingDaykey对象按照它们的postId进行分组,并将每个postId对应的DingDaykey对象列表存储在postIdMap中。为了优化这段代码,我们可以减少对postIdMap的查询次数,因为每次循环都会查询一次。我们可以通过以下方式进行优化:

使用Map的computeIfAbsent方法来简化代码。
使用Map的entrySet来遍历postIdMap,这样可以在遍历的同时处理每个postId。
优化后的代码如下:

for (DingDaykey dingDaykey : dingDaykeys) {
    // 使用computeIfAbsent来处理postIdMap中可能不存在的postId
    postIdMap.computeIfAbsent(dingDaykey.getPostId(), k -> new LinkedList<>()).add(dingDaykey);
}

这段代码的工作原理是:

computeIfAbsent方法接受两个参数:第一个是键(在这里是postId),第二个是一个函数,这个函数会在键不存在时被调用,用来创建一个新的值(在这里是一个空的LinkedList)。
当postId不存在时,computeIfAbsent会调用提供的函数创建一个新的LinkedList,然后将其与postId关联起来。
然后,add方法会被调用来将dingDaykey对象添加到对应的LinkedList中。
这样,我们就不需要在循环中显式地检查postIdMap中是否存在对应的postId,也不需要手动创建新的LinkedList,代码更加简洁且效率更高。

你可能感兴趣的:(java,开发语言)