computeIfAbsent
是 Java 中 Map
接口自 Java 8 开始提供的一个非常有用的方法。它允许你在键不存在于映射中时,通过一个指定的计算函数来计算该键对应的值,并将这个键值对插入到映射中。如果该键已经存在于映射中,则直接返回对应的值。
V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)
key
: 要检查是否存在的键。mappingFunction
: 如果给定的键不在映射中,则使用该函数来计算新值。此函数接受键作为输入,并返回与之对应的值。假设你正在开发一个应用程序,需要根据用户ID缓存用户的详细信息。你可以使用 computeIfAbsent
来简化代码逻辑,确保只有在缓存中不存在用户信息时才会从数据库或其他服务获取并放入缓存。
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 删除。