假设我有一个类似下面的User类,
class User {
int id;
String emailAddress;
}
并说我有数百万个此类用户的列表。它可以是任何数组或数组列表,也可以是任何东西。
现在,给定具有ID或emailAddress的用户,我如何有效地搜索特定用户,例如通过ID进行搜索或通过emailAddress进行独立搜索。
答案 0 :(得分:0)
我认为有两种方法可以解决您的问题,这两种解决方案都取决于您当前的体系结构。
答案 1 :(得分:0)
使用两个地图,一个地图ID到用户,另一个地图电子邮件地址到User,像这样的简单代码:
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()));
}
}