首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >computeIfAbsent的使用 键不存在于映射中时

computeIfAbsent的使用 键不存在于映射中时

原创
作者头像
JQ实验室
发布2025-08-19 10:35:35
发布2025-08-19 10:35:35
1100
举报
文章被收录于专栏:都到8月了都到8月了

computeIfAbsent 是 Java 中 Map 接口自 Java 8 开始提供的一个非常有用的方法。它允许你在键不存在于映射中时,通过一个指定的计算函数来计算该键对应的值,并将这个键值对插入到映射中。如果该键已经存在于映射中,则直接返回对应的值。

方法签名

代码语言:java
复制
V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)
  • key: 要检查是否存在的键。
  • mappingFunction: 如果给定的键不在映射中,则使用该函数来计算新值。此函数接受键作为输入,并返回与之对应的值。

使用场景示例

假设你正在开发一个应用程序,需要根据用户ID缓存用户的详细信息。你可以使用 computeIfAbsent 来简化代码逻辑,确保只有在缓存中不存在用户信息时才会从数据库或其他服务获取并放入缓存。

代码语言:java
复制
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;

public class CacheExample {
    private final Map<String, User> userCache = new HashMap<>();

    public User getUserById(String userId) {
        // 使用 computeIfAbsent 确保只在必要时从数据库加载用户信息
        Function<String, User> mappingFunction = id -> loadUserFromDatabase(id);
        return userCache.computeIfAbsent(userId, mappingFunction);
    }

    private User loadUserFromDatabase(String userId) {
        // 模拟从数据库加载用户信息的过程
        System.out.println("Loading user with ID " + userId + " from database.");
        // 这里应该是实际从数据库加载用户信息的代码
        return new User(userId, "Username for " + userId);
    }

    static class User {
        String id;
        String name;

        public User(String id, String name) {
            this.id = id;
            this.name = name;
        }

        @Override
        public String toString() {
            return "User{id='" + id + "', name='" + name + "'}";
        }
    }

    public static void main(String[] args) {
        CacheExample example = new CacheExample();
        System.out.println(example.getUserById("123"));
        // 第二次调用,应该直接从缓存中获取
        System.out.println(example.getUserById("123"));
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法签名
  • 使用场景示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档