2 回答
TA贡献1765条经验 获得超5个赞
我认为有两种可能的方法可以解决您的问题,两种解决方案都取决于您当前的架构。
如果您要从数据库中获取用户数据,则只需进行两种搜索方法。第一个搜索方法包含用户 ID 的 where 子句,另一个搜索方法包含用户电子邮件的 where 子句。
如果您没有从数据库中获取用户数据,那么您可以使用已经实现的各种搜索算法。下图包含一些搜索和排序算法的时间复杂度。但对我来说,最好先使用合并排序对数据进行排序,然后再使用二进制搜索。
TA贡献1776条经验 获得超12个赞
使用两个映射,一个映射 id 到用户,另一个映射 emailAddress 到用户,简单代码如下:
public class UserCache {
Map<Integer, List<User>> id2User = new ConcurrentHashMap<>();
Map<String, List<User>> email2User = new ConcurrentHashMap<>();
public void initMaps(List<User> users) {
id2User.putAll(users.stream()
.collect(Collectors.groupingBy(User::getId)));
email2User.putAll(users.stream()
.collect(Collectors.groupingBy(User::getEmailAddress)));
}
public List<User> getUsersById(String id) {
return id2User.get(id);
}
public List<User> getUserByEmail(String email) {
return email2User.get(email);
}
public void deleteUserById(String id) {
List<User> users = id2User.remove(id);
users.stream()
.forEach(user -> email2User.remove(user.getEmailAddress()));
}
public void deleteUserByEmail(String email) {
List<User> users = email2User.remove(email);
users.stream()
.forEach(user -> id2User.remove(user.getId()));
}
}
添加回答
举报